home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / graphic / rtnews.zip / RTNV4N1 < prev    next >
Text File  |  1992-09-13  |  128KB  |  2,950 lines

  1.  _ __                 ______                         _ __
  2. ' )  )                  /                           ' )  )
  3.  /--' __.  __  ,     --/ __  __.  _. o ____  _,      /  / _  , , , _
  4. /  \_(_/|_/ (_/_    (_/ / (_(_/|_(__<_/ / <_(_)_    /  (_</_(_(_/_/_)_
  5.          /                               /|
  6.         '                               |/
  7.  
  8.             "Light Makes Right"
  9.  
  10.                March 1, 1990
  11.             Volume 4, Number 1
  12.  
  13. Compiled by Eric Haines, 3D/Eye Inc, 2359 Triphammer Rd, Ithaca, NY 14850
  14.     erich@eye.com or uupsi!eye!erich
  15. All contents are US copyright (c) 1990 by the individual authors
  16. Archive locations: anonymous FTP at weedeater.math.yale.edu [130.132.23.17],
  17.     /pub/RTNews, and others.
  18. UUCP archive access: write Kory Hamzeh (quad.com!avatar!kory) for info.
  19.  
  20. Contents:
  21.     Introduction
  22.     New People, Address Changes, etc
  23.     Ray Tracing Abstract Collection, by Tom Wilson
  24.     Report on Lausanne Hardware Workshop, by Erik Jansen
  25.     New Version of SPD Now Available, by Eric Haines
  26.     Teapot Timings, by John Spackman
  27.     The Very First Point in Polygon Publication, by Chris Schoeneman
  28.     The Acne Problem, by Christophe Schlick
  29.     Shirley Thesis Available via Anonymous FTP, by Pete Shirley
  30.     Some Thoughts On Anti-aliasing, by Zap Anderssen, Eric Haines
  31.     New VORT Release, and the VORT Chess Set, by Eric H. Echnida, David Hook
  32.     Best (or at least Better) of RT News, by Tom Wilson
  33.     At Long Last, Rayshade v4.0 is Available for Beta-testing, by Craig Kolb
  34.     Parallel Ray Tracer, by Kory Hamzeh, Mike Muuss, Richard Webb
  35.     Distributed DKB, by Jonas Yngvesson
  36.     Quadrangle Tessellation, by Christophe Schlick
  37.     New Release of Radiance Software & Bug Fixes, by Greg Ward
  38.     Radiance Timings on a Stardent, by Eric Ost
  39.     RTSYSTEM Fast Ray Tracer, by Patrick Aalto
  40.     DKBTrace Beta Available, by David Buck
  41.     "Computer Graphics" 2nd Edition Corrections, Software, etc by Brown Emailer
  42.     Papers which are currently available from the Net via anon. FTP, J. Kouhia
  43.     ======== USENET cullings follow ========
  44.     Ray-Cylinder Intersection Tutorial, by Mark VandeWettering
  45.     C++ Fractal and Ray Tracing Book, by Fractalman
  46.     Ray/Spline Intersection Reference, by Spencer Thomas
  47.     Superquadric Intersection, by Rick Speer, Michael B. Carter
  48.     Comments on Interval Arithmetic, by Mark VandeWettering, Don Mitchell
  49.     Platonic Solids, by Alan Paeth
  50.     Moon Problems, by Ken Musgrave, Pete Shirley
  51.     Ken gave another problem with rendering the moon:
  52.     Shadow Testing Simplification, by Tom Wilson
  53.     SIMD Parallel Ray Tracing, by George Kyriazis, Rick Speer
  54.     Rayscene Animator, by Jari K{hk|nen [sic]
  55.     SIPP 2.0 3d Rendering Package, by Jonas Yngvesson and Inge Wallin
  56.     3DDDA Comments, by John Spackman
  57.     Radiosity Implementation Available via FTP, by Sumant
  58.     Dirt, by Paul Crowley
  59.     Thomson Digital Images University Donation Program, by Michael Takayama
  60.     A Brief Summary of Ray Tracing Related Stuff, Angus Y. Montgomery
  61.  
  62. -------------------------------------------------------------------------------
  63.  
  64. Introduction
  65.  
  66. Well, it's been awhile.  I've essentially fallen off the face of the earth,
  67. with too much to do.  So, it's time to throw something together during compile
  68. & link time (pity my new machine does is much faster - it makes it harder to
  69. get out an issue).  As usual, the comp.graphics version does not have all the
  70. comp.graphics cullings.  If you want the full issue, pull it in via FTP from
  71. weedeater.math.yale.edu or any other site which carries it.
  72.  
  73. My big fun for the week has been looking at my head:  I finally received my
  74. head database from the Visual Computing Group (415-688-7315) after getting my
  75. head scanned in by their Cyberware scanner at SIGGRAPH.  Quite a bargain:
  76. around $40 for a 256x512 mesh of my head.  There are lots of bad points in my
  77. database:  the top of my head is missing and my hair has a natty dredlock
  78. look, but still it's pretty amazing, and a little data interpolation here and
  79. there cleans up the dropout data points.
  80.  
  81. The data comes in a cylindrical coordinate system format, and VSG provides
  82. source code for a number of programs and utilities to convert the data in
  83. various ways.  I've heard Spencer Thomas has rendered his face as an unrolled
  84. cylinder, i.e. a height field.  So, have others out there played with these
  85. data sets much?  Anybody want to trade heads?
  86.  
  87. -------------------------------------------------------------------------------
  88.  
  89. New People, Change of Addresses, etc
  90.  
  91. --------
  92.  
  93. Michael Cohen's email address is now mcohen@cs.utah.edu
  94.  
  95. Jim Arvo's email address is now arvo@graphics.cornell.edu
  96.  
  97. Peter Miller's email address is now pmiller@pdact.pd.necisa.oz.au
  98.  
  99. --------
  100.  
  101. Brian Corrie, University of Victoria, Victoria, B.C.
  102.  
  103. I am back from my trip down under, and have a new account here
  104. at UVic.
  105.  
  106. My new address is bcorrie@csr.uvic.ca
  107.  
  108. One new area of interest.  I like the idea of the shading language provided by
  109. the RenderMan Interface.  Do you know of anyone doing work in this area?  I
  110. want to make a shader compiler, along with a shader library that has some of
  111. the pixar functions (noise..etc), that will compile a shader description into
  112. a linkable module that a renderer can link to at compile time.  Kind of a half
  113. way step between interpreting the shader description and hard coding the
  114. shader into the renderer itself.  If I set up some binding rules then any
  115. renderer that follows those rules will be able to link to any shader compiled
  116. with the shader compiler.  We can then pass around shader descriptions between
  117. users.  What do you think?
  118.  
  119. --------
  120.  
  121. # Patrick Flynn - geometry (solid and image), algorithmics, computer vision
  122. # Department of Computer Science and Engineering
  123. # University of Notre Dame
  124. # Notre Dame, Indiana 46556
  125. # (219) 239-8375
  126. alias patrick_flynn flynn@cse.nd.edu
  127.  
  128. My interest in ray tracing was an itch that I couldn't scratch during 1989 and
  129. much of 1990, while I was dissertating.  I'm presently mapping subproblems
  130. (like rendering) in model-based computer vision onto parallel architectures,
  131. and developing a graphics course for seniors and grad students, with future
  132. (unfocused) plans for an ongoing research program in graphics.
  133.  
  134. --------
  135.  
  136. # Jean-Philippe Thirion - coherency, interval arithmetic, data structure
  137. # I.N.R.I.A.
  138. # Domaine de Voluceau - Rocquencourt
  139. # B.P. 105 - 78153 LE CHESNAY CEDEX
  140. # FRANCE
  141. # (33 1) 39 63 52 79
  142. alias thirion thirion@bora.inria.fr
  143.  
  144.     I worked from 1986 to 1990 for a PHD thesis at the L.I.E.N.S., Paris,
  145. France, with Pr Claude Puech.  First about data structures and hidden part
  146. removal problems, then about the uses of coherency in order to improve ray
  147. tracing.  This work have lead to a PHD thesis about object space and ray
  148. coherency for ray tracing (in french), and two research reports (in English):
  149.  
  150. - Tries, data structure based on binary representation for ray tracing
  151. - Interval arithmetic for high resolution ray tracing
  152.  
  153.     The first report have been published in Eurographics' 90.  I am
  154. writing now a third report about some enumeration problems on binary space
  155. partitioning trees.
  156.  
  157. --------
  158.  
  159. Christophe Schlick
  160. LaBRI
  161. 351, Cours de la Liberation
  162. 33405 TALENCE CEDEX --- FRANCE
  163. Email: schlick@geocub.greco-prog.fr
  164.  
  165. I am currently working on my PhD thesis on "Realistic Image Synthesis".  It
  166. will include some classic topics as ray-tracing, radiosity, hydrid methods,
  167. antialising and parallelization of those techniques.
  168.  
  169. --------
  170.  
  171. # Henry Kaufman
  172. # Brown University graphics group
  173. alias    henry_kaufman    hek@cs.brown.edu
  174.  
  175. I worked on an ARTS ray tracer (with the SEADS) data structure.  Since the
  176. details of their algorithm were not well described in their paper (in my
  177. opinion), I had to figure out most of the algorithm myself.  The part I found
  178. interesting was "scan converting" my quadric surface primitives into the SEADS
  179. voxels.  I tried to implement Bresenham style scan converters, which turned
  180. out to be fairly efficient.  I just thought I'd mention it, even though you
  181. are probably already familiar with the algorithms involved.
  182.  
  183. --------
  184.  
  185. # Nick Holliman - parallelism, CSG, spatial subdivision, ray tracing.
  186. # School of Computer Studies,
  187. # University of Leeds,
  188. # Woodhouse Lane,
  189. # Leeds, West Yorkshire, LS2 9JT.
  190. # ENGLAND
  191. # (0532) 335446
  192. email: nick@uk.ac.leeds.dcs
  193.  
  194. I have just completed my PhD at Leeds and currently have an IBM research
  195. fellowship at Leeds, working with the IBM UK Scientific Centre, Winchester.
  196.  
  197. My PhD work was the development of a parallel CSG ray tracer.  This takes a
  198. CSG model and creates a distributed octree using a parallel algorithm.  It can
  199. then ray trace the distributed octree and uses caching to avoid replicating
  200. all the data on each processor.  The system scales well making good use of up
  201. 128 T800 transputers (as many as I could find in one place) handling models of
  202. up to 20,000 CSG primitives.  We have recently extended this to support
  203. parallel incremental update algorithms, so given a small change to the CSG
  204. model the system updates the distributed octree and then updates the region of
  205. image affected by the change.  Current work is looking at increasing the model
  206. size, improving the scalability and porting the system to other parallel
  207. machines.
  208.  
  209. I would be keen to hear from anyone working on similar parallel algorithms and
  210. if anyone is interested they are welcome to a copy of my thesis.
  211.  
  212. --------
  213.  
  214. Ning Zhang
  215.  
  216. I have written a Radiosity package and both input and output are based on the
  217. NFF file format.  Have you considered to have a similar benchmarking package
  218. for comparing different Radiosity software and hardware?  I think that would
  219. be an interesting subject.  [Any volunteers? - EAH]
  220.  
  221. ----- Self description -----
  222. # Ning Zhang - Radiosity, Raytracing, Image Compression
  223. # School of Electrical Engineering
  224. # The University of Sydney
  225. # NSW 2006, Australia
  226. # + 61 (02) 692 2962
  227. alias ning_zhang nzhang@ee.su.oz.au
  228.  
  229. I have been in Germany for two year as a visiting scientist at the Computer
  230. Graphics Center (ZGDV), Darmstadt.  There I developed a Radiosity/Raytracing/
  231. FastZBuffer package running on many platforms, including 386PC.  Recently I
  232. came to Australia as a visiting fellow at the Univ.  of Sydney.
  233.  
  234. Email: nzhang@ee.su.OZ.AU
  235.        (In Germany, zhang@agd.fhg.de or zhang@zgdvda.uucp)
  236.  
  237. --------
  238.  
  239. Craig McNaughton
  240.  
  241. Interests - CSG, Animation, higher dimension, distortions
  242.  
  243. Address -
  244. C/- Computer Science Department
  245. University of Otago
  246. PO Box 56
  247. Dunedin
  248. New Zealand
  249. ph (+64) 3 4798488
  250.  
  251. I'm in the Graphics Research Group at Otago University, currently doing a
  252. Masters.  My main project at the moment is a general 4D CSG ray tracer, and
  253. with luck, that will soon be extended to nD.  Other current work include
  254. getting the most out of 8 bit displays, and character animation with CSG
  255. systems.
  256.  
  257. --------
  258.  
  259. # David B. Wecker - Author of DBW_Render, DIDDLY and other rendering tools
  260. # Digital Equipment Corporation
  261. # 1175 Chapel Hills Drive, CXN1/2
  262. # Colorado Springs, CO  80920-3952
  263. # (719) 260-2794
  264. alias    david_wecker    wecker@child.enet.dec.com
  265.  
  266. If people want the current version of DBW (V2.0) for their Amiga, they should
  267. contact:
  268.  
  269.     William T. Baldridge
  270.     2650 Sherwood Lane
  271.     Pueblo, CO   81005
  272.         (BIX: WBALDRIDGE)
  273.  
  274. --------
  275.  
  276. David Tonnesen
  277. Dept. of Computer Science
  278. University of Toronto
  279. Toronto, Ontario  M5S 1A4
  280. (416) 978-6986 and 978-6619
  281.  
  282. research: modeling and rendering
  283.  
  284. e-mail:  davet@dgp.toronto.edu   (UUCP/CSNET/ARPANET)
  285.      davet@dgp.utoronto      (BITNET)
  286.  
  287. I am a Ph.D. student at the University of Toronto and interested in a variety
  288. of graphic topics including ray tracing.  Other areas I am interested in
  289. include models of deformable models, global illumination models, models of
  290. natural phenomena, physically based modeling, etc...  Basically modeling and
  291. rendering.
  292.  
  293. --------
  294.  
  295. Jim Rose, Visualization Research Asst.
  296. Visualization Research Group
  297. Utah Supercomputing Institute
  298. rose@graph.usi.utah.edu
  299.  
  300. --------
  301.  
  302. Bruce Kahn - general concepts, portable packages, microcomputer based pkgs.
  303. Data General Corp.
  304. 4400 Computer Dr.
  305. MS D112
  306. Westboro MA 01580
  307. (508) 870-6488
  308. bkahn@archive.webo.dg.com
  309.  
  310. -------------------------------------------------------------------------------
  311.  
  312. Ray Tracing Abstract Collection, by Tom Wilson (wilson@cs.ucf.edu)
  313.  
  314. [Tom has done the graphics community a great service in making available (for
  315. free) all the ray tracing abstracts from articles he's collected.  If you run
  316. into a ray tracing article title which sounds interesting, you should check
  317. here first to see if it's really what you want before wasting time tracking it
  318. down. --EAH]
  319.  
  320. The next release of the collection of ray tracing abstracts are ready.  I've
  321. put them in several ftp sites (listed below).  To get it, do the following:
  322. get rtabs.shar.1.91.Z using binary mode.  Uncompress it.  Unshar it (sh
  323. rtabs.1.91).  Then read READ.ME.  If you have any problems, send me e-mail.
  324. The abstracts can be converted to two forms:  Latex (preferred) or troff -me.
  325. The filters I've included may help you write your own if you need something
  326. else.  I received no feedback concerning problems, so evidently it works for
  327. those who tried it.
  328.  
  329. USA Sites:
  330. weedeater.math.yale.edu (130.132.23.17) in directory pub/Papers
  331.    Craig Kolb <craig@weedeater.math.yale.edu>
  332. karazm.math.uh.edu (132.170.108.2) in directory pub/Graphics
  333.    J. Eric Townsend <jet@karazm.math.uh.edu>
  334. iear.arts.rpi.edu (128.113.6.10) in directory pub/graphics/ray
  335.    George Kyriazis <kyriazis@iear.arts.rpi.edu>
  336.  
  337. Australia Site:
  338. gondwana.ecr.mu.oz.au (128.250.1.63) in directory pub/rtabs
  339.    Bernie Kirby <bernie@ecr.mu.oz.au>
  340.  
  341. Finland Site:
  342. maeglin.mt.luth.se (130.240.0.25) in directory graphics/raytracing/Doc
  343.    Sven-Ove Westberg <sow@cad.luth.se>
  344.  
  345. Tom Wilson
  346. Center for Parallel Computation
  347. University of Central Florida
  348. P.O. Box 25000
  349. Orlando, FL 32816-0362
  350. wilson@cs.ucf.edu
  351.  
  352. --------
  353.  
  354. Juhana Kouhia notes:
  355.  
  356. I have converted RT abstract to Postscript format - it's available from
  357. nic.funet.fi pub/graphics/papers directory as wils90.1.ps.Z.
  358.  
  359. -------------------------------------------------------------------------------
  360.  
  361. Report on Lausanne Hardware Workshop, by Erik Jansen
  362.  
  363. There was a Hardware Workshop on the 2nd and 3rd of September in Lausanne.
  364. Three papers on ray tracing are worth mentioning:
  365.  
  366. %A M-P Hebert
  367. %A M.J. McNeill
  368. %A B. Shah
  369. %A R.L. Grimsdale
  370. %A P.F. Lister
  371. %T MARTI, A Multi-processor Architecture for Ray Tracing Images
  372.  
  373. %A D. Badouel
  374. %A T. Priol
  375. %T An Efficient Parallel Ray Tracing Scheme for Highly Parallel Architectures
  376.  
  377. %A Li-Sheng Shen
  378. %A E. Deprettere
  379. %A P. Dewilde
  380. %T A new space partitioning Technique to Support a Highly Pipelined
  381. %T Architecture for the Radiosity Method
  382.  
  383. The first paper discussed a load distribution based on an image space
  384. partitioning.  Additionally the scene was stored in an octree type of space
  385. subdivision of which the first (top) n levels were duplicated over the
  386. processors and stored in their local cache.  The other levels of the database
  387. were communicated when needed.  Their figures (testpicture "gears") showed
  388. that a local cache of 1/8 to 1/4 of the size of the total database is
  389. sufficient to avoid communication bottle-necks.  It was not clear from the
  390. presentation whether these results also hold for more complex scenes.
  391.  
  392. The second paper discussed a virtual memory scheme that distributed the data
  393. base over the processors in a way that 'ray coherence' is maintained as much
  394. as possible.  The left-over memory at the processors is used as a cache.
  395.  
  396. The third paper discussed a ray coherence scheme that was based on a
  397. subdivision of a ray frustrum in sectors and a comparison of a probablistic
  398. and deterministic method to determine the width (angle) of the sectors.
  399.  
  400. These papers will be published by Springer in "Advances in Computer Graphics
  401. Hardware", vol. V. (ed. R. Grimsdale and A. Kaufman).
  402.  
  403. --------------------------------------------------------------------------
  404.  
  405. New Version of SPD Now Available, by Eric Haines
  406.  
  407. Version 3.0 of the Standard Procedural Databases is out.  The major addition
  408. is the teapot database.  Other changes include being able to input a size
  409. factor on the command line, changing mountain.c to mount.c (for IBM users),
  410. and many changes and new statistics in the README file.
  411.  
  412. The teapot database is essentially that published in IEEE CG&A in Jan. 1987.
  413. A checkerboard has been added underneath it to give it something to reflect &
  414. cast a shadow upon.  The checkerboard also reflects the subdivision amount of
  415. the teapot patches, e.g. a 7x7 checkerboard means that each patch is
  416. subdivided to 7x7x2 triangles.  Degenerate (e.g. no area, 0 length normal)
  417. polygons are either removed or corrected by the program.  The bottom of the
  418. teapot can optionally be removed.
  419.  
  420. The images for these databases and other information about them can be found
  421. in "A Proposal for Standard Graphics Environments," IEEE Computer Graphics and
  422. Applications, vol. 7, no. 11, November 1987, pp. 3-5.  See IEEE CG&A, vol. 8,
  423. no. 1, January 1988, p. 18 for the correct image of the tree database
  424. (the only difference is that the sky is blue, not orange).  The teapot
  425. database was added later, and consists of a shiny teapot on a shiny
  426. checkerboard.
  427.  
  428. The SPD package is available via anonymous FTP from:
  429.  
  430.     weedeater.math.yale.edu [130.132.23.17]
  431.     irisa.fr [131.254.2.3]
  432.  
  433. among others.  For those without FTP access, write to the netlib automatic
  434. mailer:  research!netlib and netlib@ornl.gov are the sites.  Send a one line
  435. message "send index" for more information, or "send haines from graphics" for
  436. the latest version of the SPD package.
  437.  
  438. -------------------------------------------------------------------------------
  439.  
  440. Teapot Timings, by John Spackman
  441.  
  442.     I enclose some timing figures for the SPD `teapot', ray-traced at
  443. various degrees of tessellation.  All images were rendered at 512x512 with two
  444. light sources.  The models were triangulated at a pre-processing stage to
  445. support smooth shading with barycentric co-ordinates.  I'm not sure whether
  446. all other conditions were as documented in SPD, but the output looks right!
  447.  
  448.     The host machine was a SUN SPARCStation IPC.
  449.  
  450. -------------------------------------------------------------------
  451. SIZE FACTOR    # TRIANGLES    OCTTREE CONSTRUCTION    RAY-TRACING
  452.                 (SECS)            (SECS)
  453. -------------------------------------------------------------------
  454. 1        58        9.4            841.4
  455.  
  456. 2        248        18.5            832.2
  457.  
  458. 3        570         25.8            837.2
  459.  
  460. 4        1024        35.7            844.8
  461.  
  462. 5        1610        40.8            859.9
  463.  
  464. 6        2328        50.4            864.2
  465.  
  466. 7        3178        56.6            878.8
  467.  
  468. 8        4160        66.5            900.7 (<-- 15 minutes)
  469.  
  470. 9        5274        74.0            911.2
  471.  
  472. 10        6520        81.6            922.7
  473.  
  474. 11        7898        88.7            937.4
  475.  
  476. 12        9408        95.0            954.7
  477.  
  478. -------------------------------------------------------------------------------
  479.  
  480. The Very First Point in Polygon Publication, by Chris Schoeneman
  481.     (nujy@vax5.ccs.cornell.edu)
  482.  
  483.    A few months ago there was a discussion on point in polygon algorithms
  484. (again), and one netter suggested perturbing vertices to avoid special cases
  485. (using the Jordan curve theorem).  This led me to the solution I eventually
  486. found that you had already made.
  487.  
  488.    Anyway, I just found the same solution in CACM, Aug.  1962, p.  434, and I
  489. thought you might be interested to know.
  490.  
  491.    The algorithm as given has an error in the if statement.  It should
  492. read:
  493.    if (y<=y[i] ...
  494. not
  495.    if (y<y[i] ....
  496.  
  497. The author, M. Shimrat, doesn't check the horizontal bounds of the edge to
  498. trivially accept or reject the intersection, but this, of course, isn't the
  499. key to the solution.
  500.  
  501. So much for the patent. :-)
  502.  
  503. -------------------------------------------------------------------------------
  504.  
  505. The Acne Problem, by Christophe Schlick (schlick@geocub.greco-prog.fr)
  506.  
  507.  
  508. What is Ray-Tracer Acne (RTA) ?
  509. -----------------------------
  510.  
  511. As defined by Eric Haines in an early Ray-Tracing News, RTA is those black
  512. dots that appear sometimes on a ray-traced image.  RTA can result from two
  513. different phenomena:
  514.  
  515. Case 1:  When a ray intersects a surface S, some floating round-off can bring
  516. the intersected point P inside the surface (Figure 1).  So, when a reflected
  517. ray or a light ray is shoot from P, it will intersect S and P will be in
  518. shadow.
  519.  
  520. A common solution to this problem is to let some tolerance (T) for the inter-
  521. section test:  when an intersection point M is found, the distance D between
  522. the origin of the ray and M is computed, and compared to T, the point is
  523. rejected if D < T.  The problem with that method is that T is an absolute
  524. value, coded in the source code and sometimes not adapted for a specific
  525. scene.  A solution could be to scale T by the global diameter of the scene but
  526. there will still be some scene for which it wouldn't work (for instance, a
  527. scene will very big and very small sphere).
  528.  
  529.  
  530. Case 2:  This case can only appear when rendering an object composed of
  531. polygons with interpolated normal vectors (Phong's method).  This pathological
  532. case was first described by Snyder & Barr at the SIGGRAPH 87 conference.  When
  533. a ray intersects a point P, the normal vector Np is interpolated from the
  534. vertices normals thanks to the barycentric coordinates (Figure 2).  Thus a
  535. reflected ray or a light ray shot from P according to Np (direction Out in
  536. Figure 2) can intersect another facet (Q on Figure 2).
  537.  
  538. Here the tolerance solution doesn't work because Q can be arbitrarily far from
  539. P (it depends on the surface curvature and the size of facets).  Thus Snyder &
  540. Barr proposed to move P from the surface along Np by a certain distance D, and
  541. to consider the new point P' as the intersection point from which other rays
  542. are shot.  Again, D is hard-coded and there would be some scenes for which D
  543. is too high or too low.
  544.  
  545.                   Out
  546. Out       In           Na       \      Nb
  547.   \       /             \        \     /
  548.    \     /               \        \Q  /     Np
  549. -------------- S          \--------*-/    _/
  550.      \ /                   A        B\  _/
  551.       *                               \/___________ In
  552.       P                               P\
  553.                         \______Nc
  554.                         C
  555.   Figure 1                  Figure 2
  556.  
  557.  
  558. The solution I propose is easy to implement, and robust whatever the scene.
  559. If you examine Figure 1 and 2, you can see that, in the two case the error
  560. comes from a sideness problem:  a ray that is assumed to be outside S finds an
  561. intersection that is inside S.  In a ray-tracer, you are always carrying (in
  562. the ray structure) a pointer to the media through which the ray is currently
  563. traveling --- that pointer is needed for refraction.  So when intersecting a
  564. surface, you always know the current media.  When you find a ray intersecting
  565. a surface by the inside (negative cosine), the only thing to do is to test the
  566. current media with the media inside the surface (checking the pointers).  If
  567. the two medias are different, there is a sideness problem and the point must
  568. be rejected.  That leads clearly to the following algorithm:
  569.  
  570. When a ray R traveling through a media M, with a directing [e.g. reflecting]
  571. vector V hits a point P with a normal vector N on a surface S do
  572.  
  573. Begin
  574.  
  575.  Compute Cos = -N.V (the cosine between the ray direction and normal vector)
  576.  
  577.  If Cos > 0                    /* R outside S */
  578.  
  579.    then no problem
  580.  
  581.    else                        /* R inside S */
  582.  
  583.      if M != S then reject the point        /* Sideness error */
  584.            else no problem
  585.  
  586. End
  587.  
  588.  
  589. The cost of that method is a dot product between V and N.  For reflection
  590. rays, that dot product has to be done in the shading phase, so if you store
  591. the result of the cosine in the ray structure, there will no extra cost.  But
  592. for light rays, the dot product is an extra cost.  Compared to Snyder & Barr's
  593. method, the cost is lower because moving a point along a normal vector needs a
  594. linear combination (3 additions, 3 multiplications).  For non-polygonalized
  595. surfaces, the tolerance method is cheaper, but isn't robust.
  596.  
  597. Well, make your choice. And let me know your comments (and flames !)
  598.  
  599. --------
  600.  
  601. From Eric Haines:
  602.  
  603.     Note that a third source of acne is from bump mapping - essentially it's
  604. the same problem as in case 2, but this problem of the reflection ray passing
  605. through the object can then happen to any object, not just polygons with a
  606. normal per vertex.
  607.  
  608.     Personally, I solve this problem by doing the check Christophe recommends,
  609. i.e. check the dot product of the normal and the reflection ray.  If the
  610. reflection ray is bad, I solve this by adding some portion of the normal to
  611. the reflection ray which puts the ray above the tangent plane at that point.
  612. This can result in the reflections getting a bit squished on these bad pixels,
  613. but this is much better than seeing black acne pixels.
  614.  
  615.     Christophe's solution of rejecting intersections if the media does not
  616. match is fine if you have well-behaved users, but our system assumes the user
  617. can do whatever foolish thing he wants with surface definitions (my favorites
  618. are us allowing different indices of refraction and different transmission
  619. colors for front and back faces).
  620.  
  621.     How do the rest of you solve this problem?
  622.  
  623. -------------------------------------------------------------------------------
  624.  
  625. Shirley Thesis Available via Anonymous FTP, by Pete Shirley
  626.  
  627. I have put a postscript copy of my thesis "Physically Based Lighting
  628. Calculations for Computer Graphics" on anon ftp on cica.cica.indiana.edu
  629. (129.79.20.22).  I have broken the thing into several files and compressed
  630. them.  Each file, when uncompressed, should be a stand-alone postscript file.
  631. The whole thing is about 180 pages long, so please don't kill any trees if you
  632. don't really want it!
  633.  
  634. WARNING:  The thesis files have many postscript figures in it.  It is a real
  635. printer hog.  Please be thoughtful about printing and storing the thing.
  636.  
  637. I have also put several 24 bit ppm image files in compressed form.  Don't
  638. forget to set ftp in "binary" mode.
  639.  
  640. If you want this thesis and cannot get/print these files, please don't ask me
  641. for alternate formats until after Dec. 15th.  Thanks.  It will also be
  642. available as a U of Illinois tr (I don't know when).
  643.  
  644. The directory is pub/Thesis/Shirley.
  645.  
  646. Pete Shirley
  647. Indiana U
  648. shirley@cs.indiana.edu
  649. "I didn't say it was good, just long!"
  650.  
  651. [This thesis is, among other things, a great survey of most every rendering
  652. technique to date.  "wine.ppm.Z" is an excellent image, even with the week+ of
  653. computation.  - EAH]
  654.  
  655. Thesis files:
  656.  
  657. ch1ch2.ps.Z      (125K)  Title page, etc.
  658.              Chapter 1  Introduction
  659.              Chapter 2  Basic Optics
  660. ch3ch4.ps.Z      (105K)  Chapter 3  Global Illumination Problem Formulation
  661.              Chapter 4  Surface Reflection Models
  662. ch5a.ps.Z        (221K)
  663. ch5b.ps.Z        (247K)  Chapter 5  Image Space Solution Methods
  664. ch6a.ps.Z        (261K)
  665. ch6b.ps.Z        (250K)  Chapter 6  Zonal Solution Methods
  666. ch7ch8ch9.ps.Z   (123K)  Chapter 7  Extensions to Basic Methods
  667.              Chapter 8  Implementation
  668.              Chapter 9  Conclusion
  669. app.ps.Z          (44K)  Appendices
  670. bib.ps.Z          (30K)  Bibliography
  671.  
  672.  
  673. Picture files (ppm format, Makefile, seeppm.c  viewing on SGI Iris.)
  674.  
  675. bump.ppm.Z (1.3M)   1024 by 768  camera effects, bump map, indirect lighting.
  676. gal.ppm.Z  (1.2M)   1024 by 768  solid textures, indirect lighting
  677. dense.ppm.Z (.2M)    512 by 384  dense media(8 volume zones for indirect light)
  678. sparse.ppm.Z (1.2M) 1024 by 768  sparse "   "   "
  679. turb.ppm.Z (.3M)     512 by 384  uneven " " " "
  680. lamp.ppm.Z (.8M)    1024 by 768  diffuse transmission, indirect lighting
  681. wine.ppm.Z (1.1M)   1024 by 768  fresnel reflection, bw ray tracing
  682.  
  683. -------------------------------------------------------------------------------
  684.  
  685. Some Thoughts On Anti-aliasing, by Zap Anderssen, Eric Haines
  686.  
  687. From Zap:
  688.  
  689. About Anti-aliasing:  The "standard" way of doing adaptive anti-a (refered to
  690. as AA from now on, I'm lazy) is to check the color of last pixel and pixel
  691. above or similar, and subdivide if they differ more than "this-n-that" from
  692. eachother.  Although you remember that I said once you should check what
  693. OBJECT you hit (i.e. ignoring the color) and use that as subdiv criteria, and
  694. you posted a mild flame that it wouldn't work on things like a patch mesh
  695. since we spend useless time at all edges that are same all the same....
  696.  
  697. Well, since I think that all anti-aliasing for texturemapping should be done
  698. in the texture mapping functions (for which I have a nasty trick involving the
  699. angle to the normal vector of the surf and distance to screen e.t.c.) you
  700. should only need extra rays at object edges.
  701.  
  702. But consider, what makes a surface change color abruptly? It's one of three
  703. things:
  704.  
  705. * Shadow hits
  706. * Texture map changes color
  707. * Normal veccy moves a lot.
  708.  
  709. Ok, so here is my idea:  You don't save the COLOR for last pixel, but the
  710. normal vector.  When this deviates more than this_n_that, you supersample.
  711. Then you say "hey, sucker that doesn't work!  Edges may be at different levels
  712. or so but still have the same normal veccy" and to that I say, sure thang,
  713. multiply the normal vector with the distance to the eye, and use that for a
  714. criteria?  Well, we lose the AA on the shadows, regrettably, but we get
  715. another nice criteria....  Just a stupid idea, I know there are flaws, like
  716. what happens if this Red surface is adjoining a blue one (i.e. color diff in
  717. geometry rather than texture map?)  This shouldn't be allowed ;-)
  718.  
  719. Seriously, there must be ways to fix this?  I NEVER liked the idea of AA'ing
  720. on the color diffs, since texturemaps may introduce heavy diffs even if no
  721. extra rays are really needed....
  722.  
  723. Any Commentos?
  724.  
  725. --------
  726.  
  727.     Oddly, I was just writing up my views on anti-aliasing yesterday,
  728. though for different reasons.  I agree, it would be nice to avoid subdivision
  729. on texture mapped guys.  Let's see, we have aliasing due to:
  730.  
  731. edges of objects
  732. shadow boundaries
  733. rapidly changing reflections/refractions or highlights
  734. texture maps
  735.  
  736. So, we could do something like separate out these various factors and do tests
  737. on each.  The trick is that there's interaction between these things (shadows
  738. and texture maps' effects get multiplied together:  rapidly changing textures
  739. in the dark don't matter) and that separating these out gives some weird
  740. problems (say I say "if contributions absolute values vary by more than 10%",
  741. and then I find that my highlight varies 5%, my reflection varies 7% and my
  742. shadow varies %4, should I antialias?  If yes, then why did I bother to
  743. compute these fractional contributions.  If no, then the color really is
  744. varying a lot and should be supersampled).  One advantage of separating stuff
  745. out is for texture maps sampled with area methods (e.g. mipmapping) - if the
  746. surface change ratio is separate from all the other ratios, then we could
  747. simply say "ignore the surface change ratio" if we hit an area-sampled
  748. textured object.
  749.  
  750. I don't have a good answer (yet?), but am interested to hear your ideas.
  751. Using the normal is interesting, but it feels a bit removed from the problem:
  752. on my "balls" (sphereflake) database, the normals change rapidly for the tiny
  753. spheres, but say all the spheres just reflected things (no diffuse, no
  754. highlights).  Much of the spheres' reflections is the background color, which
  755. doesn't change at all.  So super-samples which merely also hit the background
  756. in this case don't add anything, just waste time.  By checking how much the
  757. reflection color changed, instead, we could shoot less rays.
  758.  
  759. Variance on something like the normal might be worth tracking, as you point
  760. out, but what if you're, say, viewing a surface which is in shadow?  The
  761. normal varies, but the shading doesn't (no light), so you waste effort.
  762. Another interesting problem is anti-aliasing bump maps:  do you really want to
  763. do much blending, which would then smooth out the bumps?
  764.  
  765. -------------------------------------------------------------------------------
  766.  
  767. New VORT Release, and the VORT Chess Set, by Eric H. Echnida, David Hook
  768.  
  769.  
  770. Eric H. Echidna (echidna@munnari.oz.au) writes:
  771.  
  772. Vort 2.0 is now 'officially' available from the following sites:
  773.  
  774. gondwana.ecr.mu.oz.au [128.250.1.63] pub/vort.tar.Z
  775. munnari.oz.au [128.250.1.21] pub/graphics/vort.tar.Z
  776. uunet.uu.net [192.48.96.2] graphics/vogle/vort.tar.Z
  777.  (uucp access as well ~ftp/graphics/vogle/vort.tar.Z
  778.  
  779. draci.cs.uow.edu.au [130.130.64.3] netlib/vort/*
  780.  
  781. Australian ACSnet sites may use fetchfile:
  782.     fetchfile -dgondwana.ecr.mu.oz pub/vort.tar.Z
  783.  
  784. or obtain it from the Australian Netlib at draci.cs.uow.oz
  785.  
  786. ==================
  787.  
  788. VORT - a very ordinary rendering tool-kit. Version 2.0
  789.  
  790. VORT is a collection of tools and a library for the generation and
  791. manipulation of images.  It includes a ray tracer, pixel library, and
  792. utilities for doing gamma correction, median cuts, etc...
  793.  
  794. The current distribution is described as follows:
  795.  
  796. art    - a ray tracer for doing algebraic surfaces and CSG models. Art
  797.     supports the following primitives: polygons, offfiles, rings, disks,
  798.     torii, superquadrics, spheres, ellipsoids, boxes, cones, cylinders,
  799.     and algebraic surfaces. Tile patterns can be mapped onto all of the
  800.     above except algebraics, boxes, and offfiles. The following textures
  801.     are supported, bumpy, wave, marble, wood, ripple, fuzzy, stucco,
  802.     spotted, granite, and colorblend. The ray tracer uses an
  803.     acceleration technique based on the spatial kd-tree.
  804.  
  805. tools    - some utilities for fiddling around with image files, and converting
  806.     between various formats. These include tools for converting nff files
  807.     to art format, and vort files to ppm format (and ppm to vort).
  808.  
  809. docs    - various bits of doco on the tools
  810.  
  811. lib    - the pixel library files - this has only been developed to the
  812.     point needed to read and write display files.
  813.  
  814. old    - this contains a program for converting image files from 1.0
  815.     format to 1.1.
  816.  
  817. sun    - a set of display programs for a sun workstation.
  818.  
  819. X11    - a set of display programs for a 256 color X machine.
  820.  
  821. iris    - a display program for an Iris workstation.
  822.  
  823. pc    - a set of display programs for a PC with VGA Extended Graphics.
  824.  
  825. movies    - some C programs for generating some sample animations.
  826.  
  827. tutes    - some C programs for generating some animations that demonstrate
  828.     the texturing.
  829.  
  830. text3d     - some C routines that read in the hershey fonts provided with VOGLE
  831.     and use them to generate 3d text. Example input files are provided.
  832.  
  833. --------
  834.  
  835.     There are several scenes and output images from the raytracer `art'
  836. available on gondwana.ecr.mu.oz.au [128.250.1.63] in the directory pub/images.
  837. These images are 8 bit sun rasterfiles and can be converted to other formats
  838. using (for example) pbmplus.
  839.  
  840.     There are also some simple 36 frame movies in the directories
  841. pub/movies/* .  These files are in VORT format and can be displayed with the
  842. movie programs that come with VORT or can be converted to another format using
  843. the vorttoppm program that comes with VORT.
  844.  
  845. --------
  846.  
  847. [Another package available & of interest:]
  848.  
  849. VOGLE 1.2 fixes some bugs and includes some speed ups from previous versions
  850. of VOGLE.  Specifically, all matrix stack manipulations are now 'done in
  851. place' to save time.
  852.  
  853. VOGLE stands for "Very Ordinary Graphics Learning Environment".
  854.  
  855. VOGLE is a device portable 3D graphics library that is loosely based on the
  856. Silicon Graphics Iris GL.  VOGLE also supports 3D software text in the form of
  857. Hershey vector fonts.
  858.  
  859. --------
  860.  
  861. David Hook notes:
  862.  
  863. > 'vort' package includes a chess set (it's the same one as the set at DEC).
  864.  
  865. There is a better chess set in pub/chess20.tar.Z on gondwana.ecr.mu.oz.au
  866. (128.250.1.63) in the anonymous ftp area.  These pieces were also done by the
  867. same person (Randy Brown) who did the ones that are in VORT, but they are much
  868. more detailed.
  869.  
  870. --------------------------------------------------------------------------
  871.  
  872. Best (or at least Better) of RT News, by Tom Wilson
  873.  
  874. I've scrunched all of the 1988 RTNews.  I thought I would post to the net to
  875. see if anyone else would want it.  What I've removed is:  names/addresses,
  876. product reviews, reports on tracer bugs/fixes, and anything else that is
  877. "out-dated."  I've taken this approach since these programs probably no longer
  878. have the bugs and errors.  I don't know if many people are going to want the
  879. scrunched versions, but I just wanted basic RT info to print and save.  Some
  880. of the issues weren't scrunched much (mainly the first few), but some are
  881. about 1/3 the size (90,000 => 30,000 bytes).
  882.  
  883. Tom
  884. wilson@cs.ucf.edu
  885.  
  886. -------------------------------------------------------------------------------
  887.  
  888. At Long Last, Rayshade v4.0 is Available for Beta-testing, by Craig Kolb
  889.     (kolb@yale.edu)
  890.  
  891. The distribution is available by anonymous ftp from weedeater.math.yale.edu
  892. (130.132.23.17) in pub/rayshade.4.0 as either "rayshade.4.0.tar.Z" or the 16
  893. compressed tar files in the subdirectory "kits@0".
  894.  
  895. Please direct comments, questions, configuration files, source code, and the
  896. like to rayshade@weedeater.math.yale.edu.  If you get semi-serious about using
  897. rayshade, drop us a line and we'll add you to our mailing list.
  898.  
  899. Thanks to everybody who contributed to this and previous versions of rayshade,
  900. and to those of you who are willing to provide feedback on this Beta release.
  901.  
  902. >From the README file:
  903. ------
  904. This is the Beta release of rayshade version 4.0, a ray tracing program.
  905. Rayshade reads a multi-line ASCII file describing a scene to be rendered
  906. and produces a Utah Raster Toolkit "RLE" format file containing the
  907. ray traced image.
  908.  
  909. Rayshade features:
  910.  
  911.     Eleven primitives (blob, box, cone, cylinder, height field,
  912.     plane, polygon, sphere, torus, flat- and Phong-shaded triangle)
  913.  
  914.     Aggregate objects
  915.  
  916.     Constructive solid geometry
  917.  
  918.     Point, directional, extended, spot, and quadrilateral light sources
  919.  
  920.     Solid procedural texturing, bump mapping, and
  921.         2D "image" texture mapping
  922.  
  923.     Antialiasing through adaptive supersampling or "jittered" sampling
  924.  
  925.     Arbitrary linear transformations on objects and texture/bump maps.
  926.  
  927.     Use of uniform spatial subdivision or hierarchy of bounding
  928.         volumes to speed rendering
  929.  
  930.     Options to facilitate rendering of stereo pairs
  931.  
  932. This is Really and Truly a Beta release:  No patches will be issued to upgrade
  933. from this distribution and the 'official' release.  The documentation is
  934. spotty, and there is no proper 'man' page.
  935.  
  936. There are many differences between rayshade versions 3.0 and 4.0.  In
  937. particular, the input syntax has changed.  Input files created for version 3.0
  938. must be converted to version 4.0 syntax using the provided conversion utility
  939. (rsconvert).
  940.  
  941. Rayshade v4.0 Beta has been tested on several different UNIX-based computers,
  942. including:  SGI 4D, IBM RS6000, Sun Sparcstation 1, Sun 3/160, DECstation,
  943. Apollo DN10000.  If your machine has a C compiler, enough memory (at least
  944. 2Mb), and runs something resembling UNIX, rayshade should be fairly easy to
  945. port.
  946.  
  947. [...]
  948.  
  949. It is hoped that the 'official' release will include a library that provides a
  950. C interface to the various ray tracing libraries.  While there is currently no
  951. documentation for the libraries, it should be easy for you to add your own
  952. primitives, textures, aggregates, and light sources by looking at the code and
  953. sending mail if you get stuck.
  954.  
  955. It is also hoped that the modular nature of the primitive, aggregate, texture,
  956. and light source libraries will make it possible for people to write their own
  957. code and to "swap" objects, textures, and the like over the net.  The object
  958. interfaces are far from perfect, but it is hoped that they provide a
  959. reasonable balance between modularity and speed.
  960.  
  961. Additional rayshade goodies are available via anonymous ftp from
  962. weedeater.math.yale.edu (130.132.23.17) in pub/rayshade.4.0.  If you have
  963. contributions of new objects, textures, input files, configuration files, or
  964. images to make, feel free to send us email or to drop off a copy via ftp in
  965. the "incoming" directory on weedeater.
  966.  
  967. -------------------------------------------------------------------------------
  968.  
  969. Parallel Ray Tracer, by Kory Hamzeh, Mike Muuss, Richard Webb
  970.  
  971. Parallel Raytracer Available, Kory Hamzeh (kory@avatar.avatar.com)
  972.  
  973. I wrote a parallel raytracer (named 'prt') a while back with the following
  974. features:
  975.  
  976.     - Runs on multiple heterogeneous machines networked together
  977.       using TCP/IP.
  978.     - Crude load balancing.
  979.     - Primitives:
  980.         - Polygons
  981.         - Spheres
  982.         - Hallow Sphere
  983.         - Cones
  984.         - Cylinders
  985.         - A object that can be expressed in a quadratic form
  986.         - Rings
  987.     - Shading:
  988.         - Gourard
  989.         - Phong
  990.         - Whitted
  991.     - Rendering:
  992.         - Simple: one ray per pixel
  993.         - Stochastic sampling (jitter)
  994.     - Instances of objects.
  995.     - Input format:
  996.         - An extension of nff. I have written a filter which
  997.           will convert NFF files to prt format.
  998.     - Output format:
  999.         - MTV format (24 bit).
  1000.  
  1001. Note that prt is a parallel raytracer which spawns off children over multiple
  1002. machines to distribute the work.  I have only used it on five Sun
  1003. Sparcstations and have gotten excellent performance.  I'm not aware of any
  1004. other public domain parallel raytracers other than VM_pRay (which, I believe,
  1005. runs only on a specific platform).
  1006.  
  1007. --------
  1008.  
  1009. Prt version 1.01 is now available from the following sites via
  1010. anonymous ftp:
  1011.  
  1012. apple.apple.com in /pub/ArchiveVol2/prt
  1013. iear.arts.rpi.edu in pub/graphics/ray/prt
  1014.  
  1015. If you have a copy of version 1.0, I would recommend that you get a copy of
  1016. the newer one.  I will *not* post it again in alt.sources.  If you can't ftp
  1017. it, send me mail and I will mail you a copy.
  1018.  
  1019. Version 1.01 had some minor bugs fixed and I included some info that I had
  1020. forgotten to put in the first set of docs.
  1021.  
  1022. --------
  1023.  
  1024. Michael John Muuss (mike@BRL.MIL) writes:
  1025.  
  1026. >       [ lots of good stuff about BRL-CAD deleted ]
  1027. >
  1028. > While not "super sophisticated", the load balancing algorithm is
  1029. > non-trivial.  It assigns pixel blocks of variable size.  Three
  1030. > assignments are outstanding to each worker at any time, to
  1031. > pipeline against network delay.  New assignment size is tuned,
  1032. > based upon measured past performance (weighted average with variable
  1033. > weighting, depending on circumstances).
  1034.  
  1035. and Kory responds:
  1036.  
  1037. Prt's load balancing is not as sophisticated as BRL-CAD's.  Prt simply
  1038. multiplexes the scanlines across the different machines.  The slowest machine
  1039. on the network will be the bottle neck.
  1040.  
  1041. When I get a chance, I would like to use the same techniques used in BRL-CAD.
  1042. I think that it is the best load balancing for a raytracer.
  1043.  
  1044. --------
  1045.  
  1046. Timings of PRT, by Richard Webb
  1047.  
  1048. Here is a snippet of a bug report I sent off to kory@avatar.com regarding his
  1049. "prt1.01" parallel ray tracer.  Note that I ran these test on your NFF SPD
  1050. version 2.4.  I'll grab v3.0 and re-run if you think it will make any
  1051. difference.  I ran the test on a network of 25 Sun4's (both SparcStation1's
  1052. and 1+'s as well as a Solbourne and a few SunServers).  Some machines finished
  1053. in about 1/2 of the elapsed time.  The time is as reported by the PRT program.
  1054.  
  1055.  TEST     | TIME (mm:ss)
  1056. ----------+--------------
  1057.  balls    | 10:32
  1058.  gears    | 16:49
  1059.  mountain |  9:27
  1060.  rings    | 13:05
  1061.  tetra    |  0:59
  1062.  tree     |  4:05
  1063.  
  1064. It would be nice to have some texturing capability in NFF, but then I guess
  1065. that is somewhat too sophisticated for a "Neutral" format.  The SIPP2.0 image
  1066. "isy90" marble teapot on a granite base looks very good except there are no
  1067. shadows.  I hope someday we will have fast Renderman parallel "cookers"
  1068. generating nice compressed video sequences.
  1069.  
  1070. -------------------------------------------------------------------------------
  1071.  
  1072. Distributed DKB, by Jonas Yngvesson
  1073.  
  1074. DDKB (distributed dkb) has the same primitives, shading and input format as
  1075. DKB (for obvious reasons).  This includes very nice support for solid
  1076. texturing.
  1077.  
  1078. Antialiasing differs slightly.  DKB uses an adaptive jittered supersampling,
  1079. but in DDKB, each server only has access to one scanline at a time.  This
  1080. means adaption is done in the x-direction only.
  1081.  
  1082. >    - Output format:
  1083. >        - MTV format (24 bit).
  1084.  
  1085. Here I have used a mix between the MTV-format an the QRT-format used in DKB.
  1086. An MTV-header is followed by the scanlines in QRT-format.  Each line tagged
  1087. with its line number (this is because the lines are stored in the order they
  1088. are finished by the servers and must be sorted before display).
  1089.  
  1090. >Note that prt is a parallel raytracer which spawns off children over
  1091. >multiple machines to distribute the work. I have only used it on five
  1092. >Sun Sparcstations and have gotten excellent performance. I'm not aware
  1093. >of any other public domain parallel raytracers other than VM_pRay
  1094. >(which, I believe, runs only on a specific platform).
  1095.  
  1096. Yeah!  We have tried DDKB running on 55 sparcstations (then we ran out of file
  1097. descriptors, perhaps we should use UDP instead of TCP).  Pretty good
  1098. performance indeed.  Unfortunately DKB is not a terribly fast tracer in itself
  1099. and I have no time to hack around in it.
  1100.  
  1101. I'm not very willing so send this thing out though.  Partly because it is
  1102. still only a hack, and partly because I have not contacted David Buck and
  1103. asked what he thinks about the whole thing.
  1104.  
  1105. jonas-y@isy.liu.se
  1106. ...!uunet!isy.liu.se!jonas-y
  1107. University of Linkoping, Sweden
  1108.  
  1109. -------------------------------------------------------------------------------
  1110.  
  1111. Quadrangle Tessellation, by Christophe Schlick
  1112.  
  1113. Why I believe that a quadrangle tessellation is better than a triangle one.
  1114. ---------------------------------------------------------------------------
  1115.  
  1116. Tessellating objects using triangles has become a very popular method in the
  1117. ray-tracing world, at least since the classical paper of Snyder & Barr (SIG
  1118. 87) The classical idea is to start from a parametric surface f(u,v) and
  1119. regularly sample the two parameters u and v.  That gives a mesh composed of
  1120. quadrangles ABCD where A = f(u, v), B = f(u+du, v), C = f(u+du, v+dv) and D =
  1121. f(u, v+dv).  Then the only thing to do is to cut the quadrangle into two
  1122. triangles ABC, CDA for instance.
  1123.  
  1124.  
  1125.             D ------------- C
  1126.              |           _/\
  1127.              |         _/   \
  1128.              |       _/      \
  1129.              |     _/         \
  1130.              |   _/            \
  1131.              | _/               \
  1132.              |/                  \
  1133.             A -------------------- B
  1134.  
  1135.  
  1136.  
  1137. Using triangles instead of quadrangles has one main advantage:  speed Indeed,
  1138. computing the intersection between a ray and a triangle, and getting the
  1139. barycentric coordinates (needed for interpolation) is simply a linear system
  1140. of two equations.  An optimized algorithm would only take very few floating
  1141. point operations (about 8 multiplications after the ray/plane intersection)
  1142.  
  1143.  
  1144. But, using triangles instead of quadrangles has also several drawbacks:
  1145.  
  1146. First, there a two solutions to decompose a quadrangle into two triangles.
  1147. There is no absolute choice, and results will be very different when you take
  1148. ABC-CDA instead of DAB-BCD (especially if the curvature of the surface is
  1149. high).
  1150.  
  1151. But the main drawback of triangles is that the isoparametrics (u constant or v
  1152. constant) are not preserved (see figure).  Thus every texture mapping (or
  1153. radiosity reading, if you use a radiosity first pass in your system) will be
  1154. deformed.
  1155.  
  1156.  
  1157.        u=0   u=.5   u=1                   u=0   u=.5   u=1
  1158.       D ------------- C                   D ------------- C
  1159.     |      \      \                    |      |    _/\
  1160.     |      {       \                   |      |  _/   \
  1161.     |       \       \                  |      |_/      \
  1162.     |       {        \                 |     _/         \
  1163.     |        \        \                |   _/  \         \
  1164.     |        {         \               | _/     \         \
  1165.     |         \         \              |/        \         \
  1166.        A -------------------- B          A -------------------- B
  1167.        u=0      u=.5        u=1           u=0       u=.5       u=1
  1168.  
  1169.       Isoparametric u=.5 using 1 quadrangle and 2 triangles
  1170.      "Three is bad, four is good" Dustin Hoffman (in RainMan)
  1171.  
  1172.  
  1173. But there is a drawback using quadrangles instead of triangles:  speed Indeed,
  1174. computing the intersection and getting the (u,v) parameters of the
  1175. intersection point consists in solving a non-linear system of equations.  And
  1176. there is a square root.  Yerk!  (see Haines' chapter in "Introduction to Ray
  1177. Tracing")
  1178.  
  1179. Fortunately the square root can be avoided in many cases!  Tessellating
  1180. classical scenes will create a lot of very symphatic quadrangles:  squares,
  1181. rectangles, parallelograms and trapezoids.  For instance, tessellating a
  1182. surface of revolution (or more generally a surface created by sweeping a curve
  1183. around an axis, according to another curve) will create only trapezoids.
  1184.  
  1185. For squares, rectangles and parallelograms, (u,v) are given by a linear
  1186. system.  For trapezoids, (u,v) are given by a system of one linear equation
  1187. and one non- linear equation.  For all that cases, finding directly the
  1188. intersection between the ray and ONE quadrangle is LESS COSTLY than finding
  1189. the intersection between the ray and TWO triangles.
  1190.  
  1191. Another advantage of dealing with quadrangles vs triangles is the memory cost.
  1192. There are less primitives to create, to store, to transform, to put in
  1193. voxels...
  1194.  
  1195. Finally, never forget that for shadow rays, (u,v) are not needed.  Thus using
  1196. a simple intersection test (Jordan test) will be faster, for the same result.
  1197.  
  1198. --------
  1199.  
  1200. reply from Eric Haines:
  1201.  
  1202.     Just to be a devil's advocate, I thought I'd bring up some problems
  1203. with quadrilaterals versus triangles.  I personally like quadrilaterals,
  1204. especially because of the strange shading artifacts from triangles.  However,
  1205. we sometimes use triangles, such as in the situation where the quad mesh gives
  1206. quadrilaterals that are not totally planar (i.e. the four points don't lie in
  1207. a single plane).  This is ill-defined, and so we must triangulate.
  1208.  
  1209.     A more important time for triangulation is in animation.  If you use
  1210. Gouraud interpolation for shading your primitives, triangles are rotation
  1211. invariant, while quadrilaterals are not.  As such, if you make a film of some
  1212. object made of quadrilaterals rotating, you can see the quadrilateral shades
  1213. change over time.
  1214.  
  1215. --------
  1216.  
  1217. Christophe's reply:
  1218.  
  1219.     Well, non planar quadrilaterals surely can be a problem.  But when
  1220. rendering a scene there are so much approximations that are made (on the
  1221. illumination model, on the shading technique, on the normal vector
  1222. computation, ...)  So, why should it not be allowed to do some approximation
  1223. about the geometry and replace a non planar polygon by a planar one?
  1224.  
  1225.     The method I use is the following.  When sampling your object along
  1226. the u and v coordinates, test about the "planarity" of the quadrangle.  One
  1227. technique could be to compute the solid angle subtended by the 4 vertex normal
  1228. vectors.  Another technique could be to compute the max distance from a vertex
  1229. to the "approximation plane" (AC x BD).  When the solid angle or the max
  1230. distance is greater than a given tolerance, then subdivide the quadrangle
  1231. (quadtree-like scheme) until the tolerance is reached.  Of course, every one
  1232. knows that patch cracking (as defined by Catmull) should occur.  But
  1233. practically I you insure that two adjacent quadrangles are at neighboring
  1234. levels in the quadtree, cracking can not be visually detected.  (I used that
  1235. trick intuitively though I saw recently a paper on it, can't remember
  1236. where...)
  1237.  
  1238.     Concerning Gouraud shading, rotation invariance of triangles vs
  1239. quadrangles is not due to the number of vertex but to the fact that Gouraud
  1240. shading use an interpolation in screen space.  I should avoid like the plague
  1241. every method that interpolates in screen space!  Effects are well known:
  1242. perspective distorsion, rotation dependence, and so on...  I really think that
  1243. screen space Gouraud & Phong shading would disappear soon, and be replaced by
  1244. their equivalent object space shading.
  1245.  
  1246.     I haven't seen papers about that fact, but I'm sure that sure
  1247. techniques are already in use.  The idea is to use a dicing technique (as in
  1248. the Reyes rendering system) to create micro-quadrangles by sampling a
  1249. quadrangle along u and v coordinates.  The number of samples of the u
  1250. coordinate is proportional to the length of AB and CD edges (similarly for v
  1251. with BC and DA edges) The only thing to do is then to visit every micro-quad
  1252. vertex (double loop over u and v), interpolate incrementally either x, y, z,
  1253. r, g, b (Gouraud) or x, y, z, nx, ny, nz (Phong) and average samples that fall
  1254. in the same pixel.
  1255.  
  1256.     The technique isn't more complicate as screen space interpolation, and
  1257. can be hardware coded as well (incremental scheme with integer arithmetic) The
  1258. ONLY advantage is Gouraud and Phong today, is that they are hardware coded so
  1259. outperforming every software algorithm.  But it is perhaps time for chip
  1260. designer to realize that there are other --- and better --- shading methods
  1261. that support hardware implementation as well!  For instance, when will we see
  1262. a chip that does incremental voxel traversal for ray tracing ?
  1263.  
  1264. --------
  1265.  
  1266. Eric's reply:
  1267.  
  1268.     Interesting comments!  We do similar things with non-planar
  1269. quadrilaterals, that is, we find if something is not flat by checking its
  1270. tolerance from some ideal plane for it.  If the tolerance is noticeable, we
  1271. take special measures.
  1272.  
  1273.     I agree that it would be nice if Gouraud shading was replaced with
  1274. something else.  Renderman micro-facets is certainly one way to go.  The trick
  1275. is, what if you are dealing with a surface that (a) does not have a natural
  1276. parameterization (that is, [u,v] values are not attached to it) or (b) the
  1277. surface has 5 or more vertices?  It's not all that clear how to combine the
  1278. various vertex samples to get a proper shade.  The problem is admittedly
  1279. ill-defined, but some answers look better than others.  Doing a full weighted
  1280. average depending on the distance to all vertices from a given point on the
  1281. surface has been proposed, but this takes forever for complex polygons.
  1282.  
  1283.     A voxel walker might be a nice hardware addition someday, but I think
  1284. the main problem with it is that it's very special purpose.  Most hardware
  1285. manufacturers don't want to make highly specialized chips if the market is
  1286. small.  Someday I suspect things will get fast enough that ray tracing becomes
  1287. popular because it's fairly quick to do - at this point, paradoxically, we'll
  1288. probably see specialized hardware that makes ray tracing much faster still.
  1289. However, right now I see companies like AT&T Pixel Machines getting little
  1290. business for their ray tracers - everyone likes the images, but few seem to
  1291. want to get involved making them for real!
  1292.  
  1293. -------------------------------------------------------------------------------
  1294.  
  1295. New Release of Radiance Software & Bug Fixes, by Greg Ward (gjward@lbl.gov)
  1296.  
  1297. I have just put together a new release of Radiance, 1.3.  In addition to the
  1298. IES luminaire translator included separately on some tapes, 1.3 contains
  1299. several improvements, including faster runtimes for oconv with instances, a
  1300. driver for NeWS (and thus SGI's window system), better memory use on some
  1301. machines, fisheye views, and a translator for Architrion.  I plan to release
  1302. more CAD translators, specifically one for DXF, in the near future.
  1303.  
  1304. The new tar file takes up over 36 Mbytes, because it includes compiled
  1305. versions for Sun-3, Sun-4, IRIS, DECstation and MacIntosh (running A/UX 2.0),
  1306. so you will need to send a large tape to get a copy.  (Of course, you do not
  1307. need to load the binaries on your machine if you don't want them.)  As before,
  1308. full C source code is provided for all programs.
  1309.  
  1310. Send your tapes to:
  1311.  
  1312.     Greg Ward
  1313.     Lighting Systems Research
  1314.     Lawrence Berkeley Laboratory
  1315.     1 Cyclotron Rd., 90-3111
  1316.     Berkeley, CA  94720
  1317.  
  1318. --------
  1319.  
  1320. Thanks to an astute user, I have learned of a rather serious bug in the IES
  1321. luminaire data translator, ies2rad.  It involves the improper conversion of
  1322. type B photometry, and some types of asymmetric fixtures.
  1323.  
  1324. Anyone who is currently using this program, or plans to use it in the future,
  1325. is advised to get the corrected source from me directly.
  1326.  
  1327. -------------------------------------------------------------------------------
  1328.  
  1329. Radiance Timings on a Stardent, by Eric Ost (emo@ogre.cica.indiana.edu)
  1330.  
  1331. Here is the most recent set of timings which resulted from running the
  1332. Radiance batch ray-tracer on tuna.  Note that each rpict.* is a different
  1333. instance of the ray-tracer.  The differences are
  1334.  
  1335. name        compiled with
  1336. rpict.noO --     no optimizations selected
  1337. rpict.01  --    -O1, common sub-expression, etc., optimizations performed
  1338. rpict.O2  --    -O2, vectorization optimizations performed
  1339. rpict.O3  --    -O3, parallelization optimizations performed
  1340.  
  1341. Command:
  1342.   rpict.X -vp 52.5 6 58 -vd .05 -.6 -.8 -vu 0 1 0 -vh 35 -vv 35 \
  1343.       -av .1 .1 .1 -x 1000 -y 1000 scene.oct > scene.raw
  1344.  
  1345. System: Stardent Titan-3000
  1346.     4 25MhZ R3000 processors
  1347.     32 Mb main memory
  1348.     file input read from NFS mounted file-system
  1349.     file output written to a local-disk file-system
  1350.  
  1351. timing batch ray tracer rpict.noO
  1352. real     4:14.1
  1353. user     4:04.1
  1354. sys         8.5
  1355. timing batch ray tracer rpict.O1
  1356. real     4:14.4
  1357. user     4:04.4
  1358. sys         8.1
  1359. timing batch ray tracer rpict.O2
  1360. real     4:27.1
  1361. user     4:18.2
  1362. sys         6.8
  1363. timing batch ray tracer rpict.O3
  1364. real     4:15.4
  1365. user    16:37.5
  1366. sys        17.6
  1367.  
  1368. Simply optimized code does not seem to have much advantage over unoptimized
  1369. code.  Vectorization appears to slow things down, but running on all 4
  1370. processors seems to recover nearly all of the real-time performance that was
  1371. lost.  The fact that all of these results (per-processor) are fairly close
  1372. probably indicates that to obtain significant benefits from
  1373. vectorization/parallelization modification of the implementation itself is
  1374. required.  A run-time subroutine/loop histogram obtained using 'prof' has
  1375. indicated several instances where in-lining code sequences may improve
  1376. performance; though, exactly how much improvement will be obtained remains to
  1377. be seen.
  1378.  
  1379. --------
  1380.  
  1381. Further information from Eric Ost:
  1382.  
  1383. Subject: Misc. Radiance 1.3 benchmarks
  1384.  
  1385. Program: rpict, version 1.3,
  1386. Date: February 22, 1991
  1387.  
  1388. This benchmark involves the example 1000x1000 picture described in
  1389. ../ray/examples/textures as rendered from the associated makefile,
  1390. ../ray/examples/textures/Makefile.
  1391.  
  1392. -----------------------------------------------------------------------------
  1393.                       (all times are in seconds)
  1394. System                                  Real    User    System
  1395. -----------------------------------------------------------------------------
  1396. Sun-4/330 (ogre)                      10:27.9  8:10.5       8.5
  1397. SGI Personal Iris (pico)              5:41.0  5:26.5       1.6
  1398. -IBM RS6000 model 320 (off-site)      4:19.2  4:13.9       0.3
  1399. +Stardent Titan-3000 (tuna)     l     4:13.9  4:04.3       7.8
  1400. -IBM RS6000 model 540 (off-site)      2:50.3  2:45.2       0.2
  1401. *Stardent Titan-3000 (tuna)           1:52.2  1:45.7       4.8
  1402. -----------------------------------------------------------------------------
  1403. Legend:
  1404. +[Note: The entire image was rendered on 1 processor]
  1405. *[Note: Each processor renders 1/4 image, so this is the MAX of all timings.
  1406.     The -x, -y, -vv, and -vh parameters were adjusted accordingly.]
  1407. -[Note: The IBM timings were performed by our IBM representative off-site.]
  1408.  
  1409.  
  1410. System Configurations:
  1411.  
  1412. Architecture          Operating System           RAM    Processor      #
  1413. -----------------------------------------------------------------------------
  1414. Sun-4/330             SunOS Release 4.0.3_CG9    24 MB  20 MhZ SPARC  (1)
  1415. SGI Personal Iris     IRIX System V Release 3.2  16 MB  20 MhZ R3000  (1)
  1416. Stardent Titan-3000   Unix System V Release 3.0  32 MB  25 MhZ R3000  (4)
  1417. IBM RS6000 model 320  Unix System V Release ?    16 MB  20 MhZ RS6000 (1)
  1418. IBM RS6000 model 540  Unix System V Release ?    ?? MB  30 MhZ RS6000 (1)
  1419. -----------------------------------------------------------------------------
  1420.  
  1421. I would be happy to answer any questions pertaining to these timings.  In no
  1422. way am I suggesting that these timings are the best possible for a given
  1423. architecture; rather, they were the ones I obtained and may or may not be
  1424. repeatable at another site.  No special fine-tuning was done either to the
  1425. system or to Radiance before performing these timings.  Each system was
  1426. relatively quiescent and therefore had a minimal load average.
  1427.  
  1428. -------------------------------------------------------------------------------
  1429.  
  1430. RTSYSTEM Fast Ray Tracer, by Patrick Aalto
  1431.  
  1432. The initial post:
  1433.  
  1434. I just finished a small demo I have been working on a couple of months.  It
  1435. performs real-time ray-tracing and shading (a sort of mixture of them both) on
  1436. an IBM PC-compatible computer with VGA graphics.  I find it pretty impressive
  1437. (although the environment is pretty simple:  It has a planet, a moon and a
  1438. sun).  It runs at 70 frames/second on my 80386/20 Mhz machine.
  1439.  
  1440. --------
  1441.  
  1442. This RTSYSTEM (Ray-Traced System) is a small demo that uses my new superfast
  1443. raytracing algorithms.  It works on register-compatible VGA cards only, using
  1444. the non-standard 320x400x256 screen mode.  This mode is highly suitable for
  1445. animation, since it features two separate video pages and lots of colors.
  1446. Nearly all common VGA-cards work quite well in this mode.
  1447.  
  1448. This demo shows a moon orbiting a planet.  The viewer is on a distant moon of
  1449. the planet, and is looking 'up' towards the planet and the other moon.  A
  1450. distant sun can also be seen from time to time.  It is very easy to run this
  1451. demo; just type RTSYSTEM and it starts to run.  After a second or two, a green
  1452. number will appear on the bottom- right corner of the screen.  This number
  1453. tells you how many frames per second your computer is fast enough to draw.  I
  1454. programmed this demo such, that it will just run at the maximum 70
  1455. frames/second on my 80386/20 Mhz computer.  A slow VGA-card or a slower CPU
  1456. will not reach 70 frames/second, but even a 33 Mhz 80486 - machine will not
  1457. run faster than 70 frames/second, since this is the fastest hardware refresh
  1458. rate of a VGA display at this resolution.  To quit the demo, just press the
  1459. ESC key.
  1460.  
  1461. The method of rendering shaded objects usually requires a lot of computation,
  1462. since the correct color value has to be computed separately for every single
  1463. screen pixel.  The color value of a certain pixel depends on the amount of
  1464. light (and it's color) this pixel transmits towards the eye of a viewer.
  1465. Since each pixel represents some small portion of some physical object in the
  1466. 3D image space, the transmitted light can be calculated based on the
  1467. properties of this physical object.
  1468.  
  1469. When light hits a smooth surface, a portion of it is reflected, and the rest
  1470. is transmitted into the object (if the object is even slightly transparent).
  1471. The direction of the reflected light is given by the Law of Reflection:  the
  1472. angle of the reflection direction r, is equal to the angle of incidence , and
  1473. will be in the same plane as the incident vector v and a surface normal vector
  1474. N.  Vector r can be determined using vector arithmetics:
  1475.  
  1476.       r = v + 2Ncos = v - 2N(vN)
  1477.  
  1478. To calculate a dot product of two vectors requires normally 9 multiplications,
  1479. 1 division and 1 square root.  All this for every pixel in the object!!  (The
  1480. planet in the middle of the screen has nearly 2800 pixels, by the way.)  This
  1481. demo uses a highly sophisticated technique to calculate the color of a certain
  1482. pixel with only one table lookup and one addition per pixel!  Everything is
  1483. also done using only integer values (16 and 32 bit), obviously.
  1484.  
  1485. Other new techniques in this demo include a 3D-modification of a well-known
  1486. Bresenham's circle algorithm to calculate all the X, Y and Z values of a ball
  1487. using only integer additions.  (The standard method uses the ball equation
  1488. X+Y+Z=R, from which the values for Z-coordinates, for instance, can be
  1489. determined if all the other values are known.  This includes a square root and
  1490. 3 multiplications per every (X,Y) pair.)
  1491.  
  1492. Still another new technique is to apply trigonometrics to the 'ray-sphere
  1493. intersection' problem.  This does not reduce the needed computations very
  1494. much, but gives correct results with much smaller intermediate results (VERY
  1495. important when dealing with only integer resolution).
  1496.  
  1497. It is interesting to note that even a standard 386 machine with a VGA-card can
  1498. perform simplified ray-tracing in realtime.  All it takes is some
  1499. optimizations on the algorithms used.
  1500.  
  1501. An interesting thing is the optical effect called 'Mach band effect'.  If you
  1502. look closely at the planet surface, you will notice all sorts of different
  1503. patterns on it, which change rapidly as the sun moves.  These patterns are
  1504. merely an optical illusion, caused by the way the retina of our eyes function.
  1505. Since there are only 64 different shades of grey (from black to white)
  1506. available on a VGA display, the eye is sensitive enough to register the small
  1507. change between two neighboring pixels, thus creating a 'pattern' on the
  1508. screen.
  1509.  
  1510. Studying this demo you can also find out what 'anti-aliasing' means.  Look at
  1511. the edge of the planet when it is fully lit.  You will easily see the
  1512. 'jaggies'.  The planet edge does not appear to be smoothly round, but rather
  1513. can easily be seen to be just a collection of pixels.  Now, look at the
  1514. day/night border on the planet.  You will not see such jaggies here.  This is
  1515. because this borderline is 'anti-aliased'.  The transition from complete black
  1516. to complete white is gradual, and thus the eye can not detect individual
  1517. pixels.
  1518.  
  1519. My new game LineWars II will use some of these superfast rendering techniques.
  1520. It will come out sometime this year, I hope...
  1521.  
  1522.  
  1523.       Patrick Aalto
  1524.  
  1525. Contact:
  1526.  
  1527. Internet:    ap@tukki.jyu.fi    (account about to expire soon..)
  1528.         tkp72@jytko.jyu.fi
  1529.  
  1530. --------
  1531.  
  1532. I've been told that the demo I mentioned earlier can be found at
  1533. chyde.uwasa.fi (sorry, don't have the IP number here now) in the directory
  1534. PC/demo.
  1535.  
  1536. [This one caused a lot of traffic on the net.  It's a cute demo, though there
  1537. aren't all that many rays traced, and a lot of tricks are done to avoid them.
  1538. I think this is just fine:  why trace rays when you don't need to?  But it
  1539. definitely got people excited when Patrick claimed "real time ray tracing".
  1540. --EAH]
  1541.  
  1542. -------------------------------------------------------------------------------
  1543.  
  1544. DKBTrace Beta Available, by David Buck (dbuck@ccs.carleton.ca)
  1545.  
  1546. I've placed a new version of DKBTrace onto alfred.ccs.carleton.ca
  1547. (134.117.1.1) for beta testing - and for those who just can't wait :-).  The
  1548. source files and data files for DKBTrace version 2.10 can be obtained by
  1549. anonymous ftp from the above site.  They are in directory
  1550. pub/dkbtrace/dkb2.10.  No executables are available at this time.
  1551.  
  1552. Abstract:
  1553.  
  1554. DKBTrace is a freely-distributable raytrace program that renders quadric
  1555. shapes, CSG (Constructive Solid Geometry), and a handful of other primitive
  1556. shapes.  Shadows, reflection, refraction, and transparency are also supported.
  1557. DKBTrace also allows you to define complex an interesting solid textures such
  1558. as wood, marble, "bozo", etc.  The texturing facility has been greatly
  1559. enhanced in version 2.10.
  1560.  
  1561. NOTE:  The data files for version 2.10 are NOT completely compatible with
  1562.        previous versions.  Old data files must be modified to run on the
  1563.        new raytracer.
  1564.  
  1565. Please report any problems or questions to me at dbuck@ccs.carleton.ca.
  1566.  
  1567. I'm also starting up three mailing lists for people interested in the
  1568. following aspects of DKBTrace:
  1569.  
  1570.    - General Questions and Problems with DKBTrace
  1571.    - Porting DKBTrace to various platforms
  1572.    - Writing a graphical user interface for DKBTrace
  1573.       (note: I don't intend to write a graphical user interface, but
  1574.          several people have expressed an interest, so I thought I
  1575.          should at least maintain a mailing list for these people
  1576.          so they can keep in touch).
  1577.  
  1578. If you want to be added to any (or all) of these mailing lists, please send me
  1579. an EMail message indicating which mailing lists you're interested in.
  1580.  
  1581. The final release of version 2.10 should be in one or two weeks.  I will post
  1582. another announcement at that time.
  1583.  
  1584. -------------------------------------------------------------------------------
  1585.  
  1586. "Computer Graphics" 2nd Edition Corrections, Software, etc by the Brown
  1587.     Automatic Mailer
  1588.  
  1589.  
  1590. Your e-mail addressed to
  1591.         graphtext@cs.brown.edu
  1592. has been handled by an automatic "server" program that generated this response.
  1593. This server provides several services for readers of
  1594.     "Computer Graphics: Principles and Practice", 2nd edition
  1595.         by Foley, van Dam, Feiner, and Hughes
  1596.             (Addison-Wesley, 1990)
  1597.                 ISBN 0-201-12110-7
  1598.  
  1599. There are several distinct "services" you can obtain from this server, each
  1600. identified by a unique keyword.  To obtain the service, mail a message to
  1601. graphtext@cs.brown.edu containing the keyword (and only the keyword) in the
  1602. "Subject:"  line.  Only one service can be obtained per message.
  1603.  
  1604. Here are the services currently available, with the appropriate "Subject:"
  1605. lines shown:
  1606.  
  1607. --------
  1608. Subject: Help
  1609.  
  1610.     The server sends you this helpful message in response.
  1611.     If the server program seems to be broken somehow, send mail to
  1612.         Dave Sklar (dfs@cs.brown.edu)
  1613. --------
  1614. Subject: Get-Text-Bug-List
  1615.  
  1616.     Use this service to obtain a list of known "bugs" in the text.
  1617. --------
  1618. Subject: Report-Text-Bug
  1619.  
  1620.     Use this service to report a bug in the text.  The body of your
  1621.     message should give the page and line number of the bug, and if
  1622.     possible, indicate the necessary correction to be made.
  1623.  
  1624.     Please check the "text-bug-list" before submitting a bug report so you
  1625.     don't submit a duplicate bug report.
  1626.  
  1627.     Please don't submit a bug report unless you are sure that there is
  1628.     a bug in the text; this service is not for raising questions.
  1629. --------
  1630. Subject: Get-Text-Algorithms
  1631.  
  1632.     Use this service to get instructions on how to obtain electronic
  1633.     copies of many of the major algorithms (all in Pascal) presented
  1634.     in the textbook.
  1635. --------
  1636. Subject: Software-Distribution
  1637.  
  1638.     Use this service to get instructions on how to obtain SRGP and SPHIGS,
  1639.     the software packages described in chapters 2 and 7.
  1640.     These include information on all three versions:
  1641.         1) UNIX/X11  (available via ftp)
  1642.         2) Macintosh (available via ftp, except Pascal via floppy)
  1643.         3) IBM-PC and compatibles (available via floppy)
  1644. --------
  1645. Subject: Get-Software-Bug-List
  1646.  
  1647.     Use this service to obtain a list of known "bugs" in SRGP/SPHIGS.
  1648.     This list does not include omissions and bugs that are
  1649.     documented in the SRGP/SPHIGS reference manuals.
  1650. --------
  1651. Subject: Report-Software-Bug
  1652.  
  1653.     Use this service to report a bug in the software or in the doc
  1654.     associated with the software.  If you can present a code fragment
  1655.     that isolates the bug, all the better.
  1656. --------
  1657.  
  1658. At a later date, we will support services for the sharing of exercises
  1659. produced by instructors using the text, and for the submission of suggestions
  1660. for improvement of the text in later revisions.
  1661.  
  1662. -------------------------------------------------------------------------------
  1663.  
  1664. Papers which are currently available from the Net via anonymous FTP, J. Kouhia
  1665. --------------------------------------------------------------------
  1666. Last update January 28, 1991
  1667.  
  1668. Updates and mails to
  1669. Juhana Kouhia
  1670. kouhia@nic.funet.fi [128.214.6.100]
  1671.  
  1672. Put the new papers to
  1673. nic.funet.fi [128.214.6.100]
  1674. pub/graphics/papers/Incoming
  1675.  
  1676.  
  1677. %K KYRI90
  1678. %A George Kyriazis
  1679. %T A Study on Architectural Approaches for High Performance Graphics Systems
  1680. %I Rensselaer Design Research Center, Technical Report No: 90041
  1681. %D September 1990
  1682. %O weedeater.math.yale.edu [128.113.6.10]  pub/Papers/kyri90.ps.Z
  1683. %O nic.funet.fi [128.214.6.100]  pub/graphics/papers/kyri90.ps.Z
  1684.  
  1685. %K MUSG88
  1686. %A F. Kenton Musgrave
  1687. %T Grid Tracing: Fast Ray Tracing For Height Fields
  1688. %J Research Report YALEU/DCS/RR-639
  1689. %D July, 1988
  1690. %O weedeater.math.yale.edu [128.113.6.10]  pub/Papers/musg88.ms.Z
  1691. %O nic.funet.fi [128.214.6.100]  pub/graphics/papers/musg88.ps.Z
  1692.  
  1693. %K MUSG89a
  1694. %A F. Kenton Musgrave
  1695. %T Prisms and Rainbows: a Dispersion Model for Computer Graphics
  1696. %J Proceedings of the Graphics Interface '89 - Vision Interface '89
  1697. %I Canadian Information Processing Society
  1698. %C Toronto, Ontario
  1699. %P 227-234
  1700. %D June, 1989
  1701. %O weedeater.math.yale.edu [128.113.6.10]  pub/Papers/musg89a.ms.Z
  1702. %O nic.funet.fi [128.214.6.100]  pub/graphics/papers/musg89a.ps.Z
  1703.  
  1704. %K MUSG89b
  1705. %A F. Kenton Musgrave
  1706. %A Craig E. Kolb
  1707. %A Robert S. Mace
  1708. %T The Synthesis and Rendering of Eroded Fractal Terrains
  1709. %J Computer Graphics
  1710. (SIGGRAPH '89 Proceedings)
  1711. %V 23
  1712. %N 3
  1713. %D July 1989
  1714. %P 41-50
  1715. %Z info on efficiently ray tracing height fields
  1716. %K fractal, height fields
  1717. %O weedeater.math.yale.edu [128.113.6.10]  pub/Papers/musg89b.ms.Z
  1718. %O nic.funet.fi [128.214.6.100]  pub/graphics/papers/musg89b.ps.Z
  1719.  
  1720. %K MUUS??
  1721. %A M. J. Muuss
  1722. %T Excerpts from "Workstations, Networking, Distributed Graphics, and Parallel Processing"
  1723. %I BRL Internal Publication  (???)
  1724. %D ?????
  1725. %O freedom.graphics.cornell.edu [128.84.247.85] pub/RTNews/Muuss.parallel.Z
  1726. %O nic.funet.fi [128.214.6.100]  pub/graphics/papers/Muuss.parallel.ps.Z
  1727.  
  1728. %K MUUS??
  1729. %A M. J. Muuss
  1730. %A C. M. Kennedy
  1731. %T The BRL-CAD Benchmark Test
  1732. %I BRL Internal Publication  (???)
  1733. %D ?????
  1734. %O freedom.graphics.cornell.edu [128.84.247.85] pub/RTNews/Muuss.benchmark.Z
  1735. %O nic.funet.fi [128.214.6.100]  pub/graphics/papers/Muuss.benchmark.ps.Z
  1736.  
  1737. %K SHIR90a
  1738. %A Peter Shirley
  1739. %T Physically Based Lighting Calculations for Computer Graphics
  1740. %I Thesis
  1741. %D November 1990
  1742. %O weedeater.math.yale.edu [128.113.6.10]  pub/Papers/shir90a/
  1743. %O nic.funet.fi [128.214.6.100]  pub/graphics/shirley/
  1744.  
  1745. %K SHIR90b
  1746. %A Peter Shirley
  1747. %T Monte Carlo Method
  1748. %I Appendix from the SHIR90a
  1749. %D November 1990
  1750. %O nic.funet.fi [128.214.6.100]  pub/graphics/papers/shir90b.ps.Z
  1751.  
  1752. %K WILS91
  1753. %A Tom Wilson
  1754. %T Ray Tracing Abstracts Survey
  1755. %D January 1991
  1756. %O weedeater.math.yale.edu [128.113.6.10]  pub/Papers/wils91.1.shar.Z
  1757. %O nic.funet.fi [128.214.6.100]  pub/graphics/papers/wils91.1.ps.Z
  1758.  
  1759. ======== USENET cullings follow ===============================================
  1760.  
  1761. Ray-Cylinder Intersection Tutorial, by Mark VandeWettering
  1762.  
  1763. >I am trying to do ray tracing of light through a
  1764. >cylinder coming at different angle to the axis
  1765. >of the cylinder.  Could some one give me some
  1766. >pointers?
  1767.  
  1768. Ray cylinder intersection is (conceptually) just as easy as hitting a sphere.
  1769. Most of the problems come from clipping the cylinder so it isn't infinite.  I
  1770. can think of several ways to do this, but first let me mention that you should
  1771. consult Introduction to Ray Tracing edited by Andrew Glassner.  Articles by
  1772. Pat Hanrahan and Eric Haines go over most of this stuff.
  1773.  
  1774.  
  1775. It's easiest to imagine a unit cylinder formed by rotating the line x = 1 in
  1776. the xy plane about the y axis.  The formula for this cylinder is x^2 + z^2 =
  1777. 1.  If your ray is of the form P + t D, with P and D three tuples, you can
  1778. insert the components into the original formula and come up with:
  1779.  
  1780.     (px + t dx)^2 + (pz + t dz)^2 - 1 = 0
  1781.  
  1782. or    px^2 + 2 t dx px + (t dx)^2 + pz^2 + 2 t dz pz + (t dz)^2
  1783.  
  1784. or    (px^2 + pz^2) + 2 t (dx px + dz pz) + t^2 (dx^2 + dz^2)
  1785.  
  1786. which you can then solve using the quadratic formula.  If there are no roots,
  1787. then there is no intersection.  If there are roots, then these give two t
  1788. values along the ray.  Figure out those points using P + t D.  Now, clipping.
  1789. We wanted to have a finite cylinder, say within the cube two units on a side
  1790. centered at the origin.  Well, gosh, ignore any intersections that occur
  1791. outside this box.  Then take the closest one.
  1792.  
  1793. Now, to intersect with an arbitrary cylinder, work up a world transformation
  1794. matrix that transforms points into the objects coordinate system.  Transform
  1795. the ray origin and direction, and voila.  You do need to be careful to rescale
  1796. t appropriately, but it's really not all that hard.
  1797.  
  1798. You might instead want to implement general quadrics as a primitive, or choose
  1799. any one of a number of different ways of doing the above.  Homogeneous
  1800. coordinates might make this simpler actually....  Hmmm....  And there is a
  1801. geometric argument that can also be used to derive algorithms like this.
  1802.  
  1803. Think about it.  It shouldn't be that difficult.
  1804.  
  1805. -------------------------------------------------------------------------------
  1806.  
  1807. C++ Fractal and Ray Tracing Book, by Fractalman
  1808.  
  1809. There's a very nice book called 'Fractal Programming and Ray Tracing with
  1810. C++'by Roger T.  Stevens and published by M&T Books.  The book comes with a
  1811. disk of sample programs for Zortech C++ but can be modified to be used with
  1812. Turbo C++.  The text is very easy to understand and you only need some
  1813. rudimentary knowledge of C and computer graphics.
  1814.  
  1815. -------------------------------------------------------------------------------
  1816.  
  1817. Ray/Spline Intersection Reference, by Spencer Thomas
  1818.  
  1819. >Can someone please tell me where I can find an algorithm for
  1820. >finding the intersection of a ray and a Bezier and/or B-Spline
  1821. >patch.
  1822.  
  1823. You might look at
  1824.  
  1825. Lischinski and Gonczarowski, "Improved techniques for ray tracing parametric
  1826. surfaces," Visual Computer, Vol 6, No 3, June 1990, pp 134-152.
  1827.  
  1828. Besides having an interesting technique, they refer to most of the other
  1829. relevant work.
  1830.  
  1831. -------------------------------------------------------------------------------
  1832.  
  1833. Superquadric Intersection, by Rick Speer, Michael B. Carter
  1834.  
  1835. Here's some material that may be of assistance. The following paper-
  1836.  
  1837.   "An Introduction to Ray Tracing", by Roman Kuchkuda, pp. 1039-60 in
  1838.   Theoretical Foundations of Computer Graphics and CAD, R. A. Earnshaw,
  1839.   Ed., Springer-Verlag, 1988.
  1840.  
  1841. is a good introduction to the tracing of superquadrics.  In addition to the
  1842. usual overview material it gives actual source code, in C.
  1843.  
  1844. This paper-
  1845.  
  1846.   "Robust Ray Tracing with Interval Arithmetic", by Don Mitchell, pp.
  1847.   68-74 in the Proceedings of Graphics Interface '90, Canadian Infor-
  1848.   mation Processing Society (Toronto), 1990.
  1849.  
  1850. focuses in particular on root-finding when intersecting a ray with an implicit
  1851. surface.  Mathematical and pictorial examples of tracing super- quadrics are
  1852. given, along with data on the time-cost of intersections (when run on a
  1853. SPARCstation).  There's also some discussion of using the method for CSG.
  1854.  
  1855. Finally, this thesis-
  1856.  
  1857.   "Implementation of a Ray-Tracing Algorithm for Rendering Superquadric
  1858.   Solids", Bruce Edwards, Masters Thesis and Technical Report TR-82018,
  1859.   Rensselaer Polytechnic Institute (Troy, NY), December 1982.
  1860.  
  1861. probably goes into more detail than either of the papers mentioned above.
  1862.  
  1863. [Actually, it doesn't:  there's one page on intersecting superquadrics, which
  1864. says something like "use Newton's Method" and gives a reference number, which
  1865. turns out to be a "private conversation with Alan Barr".  --EAH]
  1866.  
  1867. --------
  1868.  
  1869. From Michael B. Carter:
  1870.  
  1871.      I was just digging through my literature and finally came up with the
  1872. reference that was stuck in the back of my mind.  I cannot vouch for the speed
  1873. of this method, but here's the ref.
  1874.  
  1875. Kalra, Devendra, and Alan H. Barr, "Guaranteed Ray Intersections with
  1876. Implicit Surfaces," Computer Graphics, Vol. 23, No. 3, July 1989.
  1877.  
  1878. This method uses Lipschitz conditions to intersect ANY implicit surface.  It
  1879. always finds the closest (or subsequent) intersection points -- even in badly
  1880. behaved functions.  There are also some really neat pictures of blended
  1881. objects in the paper.
  1882.  
  1883. -------------------------------------------------------------------------------
  1884.  
  1885. Comments on Interval Arithmetic, by Mark VandeWettering, Don Mitchell
  1886.  
  1887. First some comments by Mark:
  1888.  
  1889. >>  "Robust Ray Tracing with Interval Arithmetic", by Don Mitchell, pp.
  1890. >>  68-74 in the Proceedings of Graphics Interface '90, Canadian Infor-
  1891. >>  mation Processing Society (Toronto), 1990. [Rick Speer]
  1892. >
  1893. >    Interesting paper, though I admit to not having tried its method yet.
  1894. >Looks like a great general method for superquadrics and whole families of
  1895. >surfaces.  My favorite paper of this proceedings. [Eric Haines]
  1896.  
  1897. Very interesting paper, but I believe that the convergence of the method is
  1898. quite slow, even slower than bisection.  I coded up a version of it for the
  1899. MTV raytracer, and was testing it out when it was clear it was converging VERY
  1900. slowly.  If anyone has some hints, or wants to discuss this further, send me
  1901. some email.
  1902.  
  1903. The reason I was interested in this scheme is that it would allow you to trace
  1904. non-linear rays (rays could be generalized to space curves) which would allow
  1905. more generic transformations of objects (ala Al Barr).
  1906.  
  1907. You can use geometrical properties of the superquadric to figure out
  1908. intersections.  There can be at most two intersections in any octant of the
  1909. superquad, so a primitive method would be to handle each octant separately and
  1910. then use some favorite numerical method (Newtons or bisection) to home in on
  1911. the roots.
  1912.  
  1913. --------
  1914.  
  1915. Don Mitchell responds:
  1916.  
  1917. The interval-arithmetic algorithm is a root-isolation algorithm.  It gets used
  1918. in combination with root-refinement (something much faster than bisection and
  1919. much safer than Newton's method, hopefully).  The speed of convergence depends
  1920. a lot on how you are refining intersections.  If you are just performing the
  1921. interval algorithm until it converges to a root, that would be very slow and
  1922. not really a proper application of the method.
  1923.  
  1924. For a benchmark image containing a number of 4th degree algebraic surfaces,
  1925. the interval method was about three times slower than a specialized polynomial
  1926. solver (e.g., Sturm sequences).  Its hard to compare its run time on
  1927. transcendental surfaces, since I don't know any other way except Kalra's
  1928. Lipschitz method (described in SIGGRAPH 89).  I think interval arithmetic is
  1929. more straightforward than the Lipschitz methods, particularly for surfaces
  1930. with singular gradients (like concave superquadrics).  It does not require an
  1931. off-line human calculation to derive Lipschitz conditions.
  1932.  
  1933. There are also a lot of improvements that I didn't mention (or implemented
  1934. later).  For example, there are faster interval multiply algorithms than the
  1935. one I gave.  You can do the root isolation algorithm with (F, dF/dt) instead
  1936. of (F, grad F).  There are also ways of using the derivative intervals to
  1937. narrow the function intervals with the mean-value theorem.
  1938.  
  1939. Like a lot of techniques, there is a long journey between theory and
  1940. implementation.
  1941.  
  1942. -------------------------------------------------------------------------------
  1943.  
  1944. Platonic Solids, by Alan Paeth
  1945.  
  1946. Coordinates for these and for their four-dimensional analogs were published by
  1947. HSM Coxeter, first in 1948 in _Regular Polytopes_, pg. 52-53 (Methuen, London)
  1948. and again in subsequent revisions; any/all are highly recommended reading. The
  1949. table for (quasi) regular 3D polyhedra is transcribed below. I've posted this a
  1950. few times already; perhaps a "frequently asked" entry is in order.
  1951.  
  1952.  
  1953.             PLATONIC SOLIDS
  1954.         (regular and quasi-regular variety,
  1955.         Kepler-Poinset star solids omitted)
  1956.  
  1957. The orientations minimize the number of distinct coordinates, thereby revealing
  1958. both symmetry groups and embedding (eg, tetrahedron in cube in dodecahedron).
  1959. Consequently, the latter is depicted resting on an edge (Z taken as up/down).
  1960.  
  1961.     SOLID            VERTEX COORDINATES
  1962.     -----------      ----------------------------------
  1963.     Tetrahedron      (  1,  1,  1), (  1, -1, -1), ( -1,  1, -1), ( -1, -1,  1)
  1964.     Cube             (+-1,+-1,+-1)
  1965.     Octahedron       (+-1,  0,  0), (  0,+-1,  0), (  0,  0,+-1)
  1966.     Cubeoctahedron   (  0,+-1,+-1), (+-1,  0,+-1), (+-1,+-1,  0)
  1967.     Icosahedron      (  0,+-p,+-1), (+-1,  0,+-p), (+-p,+-1,  0)
  1968.     Dodecahedron     (  0,+-i,+-p), (+-p,  0,+-i), (+-i,+-p,  0), (+-1,+-1,+-1)
  1969.     Icosidodecahedron(+-2,  0,  0), (  0,+-2,  0), (  0,  0,+-2), ...
  1970.              (+-p,+-i,+-1), (+-1,+-p,+-i), (+-i,+-1,+-p)
  1971.  
  1972.     with golden mean: p = (sqrt(5)+1)/2; i = (sqrt(5)-1)/2 = 1/p = p-1
  1973.  
  1974. --------
  1975.  
  1976. The poster wanted a circumscribing (unit) sphere. Just pick a vertex and
  1977. calculate its length (to the origin) and you have R, that sphere's radius.
  1978. Normalize (divide all coordinates by R) and the solids are contained by a
  1979. unit sphere.
  1980.  
  1981.     Alan Paeth
  1982.     Computer Graphics Laboratory
  1983.     University of Waterloo
  1984.  
  1985. -------------------------------------------------------------------------------
  1986.  
  1987. Moon Problems, by Ken Musgrave, Pete Shirley
  1988.  
  1989. >  Am I correct in a vague memory I seem to have, that the (Earth's) moon is
  1990. >supposedly a near-ideal Lambertian reflector?
  1991. >
  1992. >  There's something fishy here, methinks.
  1993.  
  1994. The moon is not lambertian.  If it were, then a full moon would be bright at
  1995. the center of the disk, and fade into black at the edges.  Instead, a full
  1996. moon is a fairly uniformly colored disk.  If you assume the lambertian surface
  1997. has a scattering probability kcos(theta), you might guess that the moon is
  1998. just k (scatters in all directions above the surface with equal
  1999. probabilities).  I think this will work for a simple model.
  2000.  
  2001. pete
  2002.  
  2003.  
  2004. PS-- I saw some angular reflectance curves in some book I can't find.  I think
  2005. it was a heat transfer text.  The actual function was pretty funky.
  2006.  
  2007. --------
  2008.  
  2009. Alain Fournier responds:
  2010.  
  2011. As this is one of my favorite trick question about reflection, I'll bite.
  2012. Consider the moon when full (that is the sun -the light source- is in the same
  2013. direction as the observer -the eye.  It is pretty obvious that it appears
  2014. essentially as a disk, that is the reflected light is about of same luminance
  2015. all over the visible part of the moon (I ignore the effect of the surface
  2016. details such as the maria).  That shows that it is neither a specular
  2017. reflector (the center would be a lot brighter than the periphery, nor a
  2018. diffuse reflector (the center would be somewhat brighter than the periphery
  2019. (try this on your favorite renderer, a perfectly diffuse white sphere
  2020. illuminated from the direction of the eye).  So what's going on.  Well, as
  2021. most of the computer graphics types (us) ignore, the world is not all between
  2022. totally diffuse and totally specular, there are surfaces outside of this.  In
  2023. the case of the moon, it so happens that a Phong model (using the expression
  2024. loosely) with an exponent of 0.5 for the cosine of the angle normal/light
  2025. gives the right appearance of a disk at full moon.  I can find exact
  2026. references back in my office, if anybody is interested.  Credit where credit
  2027. is due:  Bob Woodham, of UBC, first pointed that out to me, and has worked on
  2028. the subject of models for the surface reflectance of the moon (and other
  2029. objects in the solar system).
  2030.  
  2031. --------
  2032.  
  2033. Doug McDonald replies:
  2034.  
  2035. Remember that the moon has hills and valleys.  The hills near the terminator
  2036. are what one sees, and the actual surface is seen at an angle much less than
  2037. 90 degrees.  The actual surface itself is sort of Lambertian.  At least when I
  2038. actually examined some small (~5 cm) size pieces of the Moon in a lab they
  2039. looked rather Lambertian.  On the spot reports agree.
  2040.  
  2041. The word "fractal" comes to mind.
  2042.  
  2043. --------
  2044.  
  2045. Paul Heckbert writes:
  2046.  
  2047. As others have mentioned, the moon and other dusty surfaces are not
  2048. Lambertian.  Blinn, in the paper cited below, says they follow the
  2049. Hapke-Irvine illumination model more closely.
  2050.  
  2051. %A James F. Blinn
  2052. %T Light Reflection Functions for Simulation of Clouds and Dusty Surfaces
  2053. %J Computer Graphics
  2054. (SIGGRAPH '82 Proceedings)
  2055. %V 16
  2056. %N 3
  2057. %D July 1982
  2058. %P 21-29
  2059. %K shading
  2060. %Z Hapke-Irvine illumination model
  2061.  
  2062. -------------------------------------
  2063.  
  2064. Ken gave another problem with rendering the moon:
  2065.  
  2066. >  A very wide-angle view of a scene (i.e., a landscape), with a sphere
  2067. >(i.e., a moon) in an extreme corner of the image, sports one very distorted
  2068. >sphere in the image, when rendered using the standard virtual-screen model
  2069. >for ray tracing.  (See the cover of Jan. '89 IEEE CG&A for an example.)
  2070. >
  2071. >  Seems that this is a version of the sphere-to-plane mapping problem, and
  2072. >therefore inadmissible to a non-distorting solution.
  2073. >
  2074. >  Can anyone out there prove this conjecture right or wrong, or demonstrate
  2075. >some nice workaround?
  2076. >
  2077.  
  2078.    Yes, this distortion is due to sphere-to-plane mapping.  Actually, the
  2079. volume defined by the rays joining every point on the sphere to the center of
  2080. projection will be a cone.  Now an intersection of this cone with a plane will
  2081. invariably result in an ellipse.  So EVERY sphere, should look like an
  2082. ellipsoid in a ray-traced image which uses this model.  But the distortion is
  2083. prominent only for spheres located in extreme corner of the scene.
  2084.  
  2085.    I also encountered the same problem and would be interested in any method
  2086. or projection-model which circumvents this problem.  If the pin-hole camera
  2087. model is not a good model for the human eye-brain system then is there any
  2088. other model which is more accurate?
  2089.  
  2090. Dilip Khandekar
  2091.  
  2092. --------
  2093.  
  2094. A solution I can see is to have each pixel, instead of having a calculated
  2095. position on a viewing plane, have each instead with a calculated horizontal
  2096. and vertical angle from the center.  Knowing the angles, one can easily
  2097. construct a vector of the appropriate angles to represent this pixel's ray.  I
  2098. have not actually implemented this, but it is obvious that this would work, as
  2099. when a conventional method is used and the viewing plane is located far from
  2100. the eye point, the near-spherical approximation of the plane is good enough to
  2101. remove most any distortion.  The reason why a conventional camera does well is
  2102. due to the same phenomenon -- it takes a spherical "bunch" of rays and maps
  2103. them to the film plane.  If I ever get my present thesis out of the way, I
  2104. will attempt to implement this in my version of DBW_Render.
  2105.  
  2106. Prem Subrahmanyam
  2107.  
  2108. [If I understand this correctly, the idea is doing equal angle spacing of
  2109. rays, instead of equal increments on the image plane.  I gave this suggestion
  2110. to Ken, then quickly tried it out & found it lacking, as it distorts straight
  2111. lines into curves and I forget what else.  See the next entry. --EAH]
  2112.  
  2113. --------
  2114.  
  2115. This rings a bell in my mind, since I once by mistake in my raytracer did a
  2116. purely 'angular' perspective model, i.e. the x axis of the display was really
  2117. the angle of the ray in the ground plane, and the 'y' coordinate was the angle
  2118. from that plane...  the image looked....  different....  well, anybody
  2119. implemented some kind of 'different' perspective model?  Ideally, you would
  2120. hook up the user's face to the screen via a telescopic pole, and pull it via
  2121. pneumatic cylinders to the correct viewing distance, and the rendering
  2122. equation should of course not project onto a plane, but onto a slightly curved
  2123. ditto (i.e. a computer monitor).  Now we would hear no more whining about
  2124. perspective distorsion....  ;-)
  2125.  
  2126. No, seriously, anybody tried twiddling with it?  I did (by mistake) in my
  2127. tracer but, well....  nah, not good...  And the problem is, also, that these
  2128. twiddlings are only easy to do in raytracers, since linear-things (polygon's
  2129. and such) may get non-linear sides when you twiddle (har har for you
  2130. Z-buffalos ;-)
  2131.  
  2132. Zap Anderssen
  2133.  
  2134. --------
  2135.  
  2136. You might like to experiment with mimicking the distorting effect of camera
  2137. lenses.  Lenses which behave like renderers are very expensive, and are called
  2138. something like `flat-plane lenses' (surprise).  Ordinary lenses exhibit
  2139. distortion (it's called that in optics books).  Positive distortion makes flat
  2140. squares look like pillowcases, negative makes them look weird.  A way to model
  2141. positive distortion is to move points in the picture closer to the center.  A
  2142. point that starts off at (r, theta) on the image plane in polar co-ordinates
  2143. would move to (r', theta) where, in two popular approximations:  r' = r (1 - C
  2144. * r * r) r' = r * cos (C * r) for appropriate (small) constants C.  Of course,
  2145. I was working with images.  In a ray-tracer, you would distort the directions
  2146. of the rays by using the inverse transformation to splay the rays from the
  2147. camera outwards.
  2148.  
  2149. NO guarantees that it will fix the problem, but it is not a million miles away
  2150. from this discussion....
  2151.  
  2152. Ian D. Kemmish
  2153.  
  2154. --------
  2155.  
  2156. If the distorsion is too large, look for conformal mappings.  A conformal
  2157. mapping would transform _small_ circles to circles.  The most general
  2158. conformal mapping from the sphere to the plane is a stereographic projection
  2159. followed by an analytic transformation of the complex plane.  Read the Shaum
  2160. book on complex variables, do all the problems and start tinkering :-).
  2161.  
  2162. Pierre Asselin,  R&D, Applied Magnetics Corp.
  2163.  
  2164. --------
  2165.  
  2166. Pictures generated with a standard perspective camera model only look "normal"
  2167. if the viewing angle used during rendering matches the angle at which you view
  2168. the picture.  If you use a horizontal view angle of theta during perspective
  2169. rendering, and view the pictures on a monitor of width w, then if you view the
  2170. screen at a distance of d = w/2*cot(theta/2), the picture will not look
  2171. distorted.  Here's a little table for a w=14" screen:
  2172.  
  2173.                      telephoto     about normal     wide angle
  2174.  
  2175.     view angle (degrees), theta        :   10        50        90
  2176.  
  2177.     recommended viewing distance, d :   80"        15"        7"
  2178.  
  2179. The same argument applies in photography:  shoot a photograph with a standard
  2180. (50mm focal length) lens, print it at 8x10" size, say, and it will look pretty
  2181. normal when viewed at a distance of about one foot.  If you shoot a picture
  2182. with a wide angle lens (24mm, say) and print it at 8x10, you will perceive
  2183. "perspective distortion" if you view it at a distance of a foot, but it will
  2184. look much less distorted if you hold it close to your face, so that your
  2185. viewing angle matches the view angle captured by the lens.
  2186.  
  2187. The argument also applies in projection of movies and slides:  there is only
  2188. one point in a movie theater from which a viewer will see the same image as
  2189. that seen by the camera (i.e. same angle of view).  Theater geometry and the
  2190. lenses used for shooting and projection are usually chosen to put that "ideal
  2191. viewer position" near the middle of the theater, I imagine.  Assuming perfect
  2192. filming and projection and one eye closed, viewers at this ideal position will
  2193. not see any distortion artifacts of the projection -- that is, they will not
  2194. be able to tell the difference between a projected film and a window into a
  2195. 3-D scene.  Viewers not at the ideal viewing position, such as those in the
  2196. first row, will see the familiar artifacts of perspective "distortion" that
  2197. will easily allow them to distinguish between a projected image and a real 3-D
  2198. scene.
  2199.  
  2200. Another interesting observation about projections is that you can project onto
  2201. ANY shape screen you like (planar, spherical, cube corner, curtain, human
  2202. torso, ...) and there will be no artifacts of the projection if the
  2203. projection lens matches the shooting lens, the viewer is right at the
  2204. projector, and the surfaces are properly finished.
  2205.  
  2206. ---
  2207.  
  2208. Related question:  is there a formula relating camera lens focal length and
  2209. angle of view?  (I would guess that such a relationship would not be
  2210. theoretical, but would be based on practicalities, and would vary from
  2211. manufacturer to manufacturer)
  2212.  
  2213. Paul Heckbert
  2214.  
  2215. --------
  2216.  
  2217. In reply to Paul Heckbert:
  2218.  
  2219. Focal length and angular field are independent.  For example, you can have a
  2220. 50mm focal length lens which is a "standard" lens for 35mm photography, or a
  2221. 50mm wide angle lens for a larger film format.  There are some applications
  2222. (enlarging?)  where it is sometimes recommended to use a wide angle lens from
  2223. a larger film format in place of a standard lens to assure better field
  2224. uniformity.
  2225.  
  2226. For a family of lenses designed for a given film size, then of course there
  2227. will be a relationship between focal length and field of view, since economics
  2228. dictate that the field of view should be no larger than necessary.  Note that
  2229. the field does not have a sharply defined size, but that the intensity drops
  2230. off continuously at the margins of the field (vignetting).
  2231.  
  2232. Jeff Mulligan
  2233.  
  2234. --------
  2235.  
  2236. In response to Paul's related question:
  2237.  
  2238. The relationship is fairly straightforward as I understand it.  Think pyramid
  2239. where the width and length of the base are defined by the image dimensions and
  2240. the height is given by the focal length.  The formula for the angle is simply:
  2241.  
  2242.     angle = 2 * atan(film_size/2 / focal_length)
  2243.  
  2244. For 35mm film, whose image dimensions are 34mm by 23mm (approx.), the view
  2245. angles for a standard 50mm lens are 37.6 by 25.9 degrees.
  2246.  
  2247. Greg Ward
  2248.  
  2249. --------
  2250.  
  2251. If Ken is rendering an outdoor picture at night with the moon in it, then it
  2252. is probably a very wide angle picture, and you are absolutely correct that the
  2253. answer is "stick you face closer to the screen and it will look ok."
  2254.  
  2255. You state:
  2256.  
  2257. >there is only one point in a movie theater from which a viewer will see the
  2258. >same image as that seen by the camera (i.e. same angle of view).  Theater
  2259. >geometry and the lenses used for shooting and projection are usually
  2260. >chosen to put that "ideal viewer position" near the middle of the
  2261. >theater, I imagine.
  2262.  
  2263. You don't have to imagine.  You are exactly right.  I remember this from
  2264. filmmaking books I read in high school.  A 35mm movie camera uses 50mm lenses
  2265. as the "normal" lens.  A 35mm film projector uses a 100mm lens so the picture
  2266. looks right when you are seated half way between the projector and the screen.
  2267. (I don't remember the numbers for "Panavision" or other wide screen systems.)
  2268. Use of telephoto or wide angle lenses in the camera produces some distortion
  2269. to the viewer at the center of the theater.
  2270.  
  2271. This is something very important to film directors.  All films are done this
  2272. way.  They understand it.  I have never heard this issue mentioned in the
  2273. context of computer graphics.  Maybe no one knows this?
  2274.  
  2275. As to your question:
  2276.  
  2277. >is there a formula relating camera lens focal length and angle of view?
  2278.  
  2279. Such a formula is simple, if the lens has no distortion, and the size and
  2280. shape of the film is known.  Where distortion is distortion in the strict
  2281. optical aberration sense.  Any optical system is subject to several
  2282. aberrations to varying degrees.  These are:
  2283.  
  2284. spherical abberation
  2285. coma
  2286. astigmatism
  2287. curvature of field
  2288. distortion
  2289. longitudinal chromatic aberration
  2290. lateral chromatic aberration
  2291.  
  2292. Distortion is non-uniform magnification across the field of view.
  2293. Magnification usually varies slightly as the angle off the optical axis
  2294. varies.  This gives rise to "barrel" (negative) or "pincushion" (positive)
  2295. distortion.  Named, for what the image of a square looks like when subjected
  2296. to said distortion.
  2297.  
  2298. For camera lenses, you can safely assume the distortion is very small except
  2299. for wide angle lenses (which is probably the case you were interested in).  I
  2300. expect that lens manufacturers would be reluctant to release the actual
  2301. numbers describing their lens's performance, since most people couldn't tell
  2302. the difference anyway.
  2303.  
  2304. For a lens focused at infinity and flat film,
  2305. fov = 2 * atan ( film_width / ( 2 * focal_length ) )
  2306.  
  2307. The only difference between a distortionless lens and an ideal pinhole camera
  2308. with respect to field of view is that if the lens is focused at a finite
  2309. distance, replace focal_length in the above formula with:  1/(1/focal_length -
  2310. 1/object_distance) which is the lens to image (film) distance.
  2311.  
  2312. Chuck Grant
  2313.  
  2314. --------
  2315.  
  2316. >Related question: is there a formula relating camera lens
  2317. >focal length and angle of view?
  2318.  
  2319. The way this is done for a rectilinear lens (everything one ever encounters
  2320. short of optics with high distortions or a fisheye) is based on the size of
  2321. the image formed.  In an "ideal" lens -- a pin-hole is a nice first
  2322. approximation -- the field is as large as you want -- the negative or film
  2323. holder or other physical limitation defines the "field stop".  In a more
  2324. complex lens the diameter of some internal element might serve to define the
  2325. field stop -- a 50mm lens for a 35mm SLR would probably not be able to produce
  2326. a ~250 mm image circle if mounted on a large format camera's lens board.  If
  2327. if could it would make a tremendous wide angle!
  2328.  
  2329. If the linear field F is given, then you can use the dimensionless relation:
  2330.  
  2331.          2 tan(A/2) = F/EFL
  2332.  
  2333. to solve for angular field A or effective focal length.
  2334.  
  2335. This says (for instance) that a conventional SLR with 43 mm film diagonal (35
  2336. mm film is 24 mm x 36 mm; hypot(24,36)~=43) will cover a reasonable, mildly
  2337. wide-angle 53 degree (diagonally) angular field with a 43 mm lens installed.
  2338.  
  2339. Alan Paeth
  2340.  
  2341. --------
  2342.  
  2343. So using the (theoretical! yay!) relation
  2344.  
  2345.     angle = 2 * atan(film_size/2 / focal_length)
  2346.  
  2347. with 35mm film format, which I'm taking to be 34mm wide by 24mm high (Greg
  2348. Ward's numbers; Alan Paeth's numbers differ slightly:  24x36), we get the
  2349. following correspondence for some common lens focal lengths:
  2350.  
  2351.     focal length (mm)    24    35    50    80    200
  2352.  
  2353.     horizontal angle (deg)    70.6    51.8    37.6    24.0    9.72
  2354.  
  2355.     vertical angle (deg)    51.2    36.4    25.9    16.4    6.58
  2356.  
  2357. Paul Heckbert
  2358.  
  2359. -------------------------------------------------------------------------------
  2360.  
  2361. Shadow Testing Simplification, by Tom Wilson
  2362.  
  2363. Out of nowhere, I have come up with a new (?) speedup (?) technique for
  2364. shadow testing in ray tracing.  I don't have the kind of code necessary to
  2365. test it.  It is kind of the inverse of a bounding volume:
  2366.  
  2367. Consider an expensive-to-intersect object (and for this example, a convex
  2368. solid.  I'll generalize later).  Now typically a bounding volume tells you
  2369. when a ray misses the object or parts of the objects (for hierarchies).
  2370. Eventually you have to intersect the object itself (I'm assuming the object
  2371. hasn't been broken down into polygons or whatever).  Now what would be good is
  2372. a volume that, if intersected, would tell you the object is hit without
  2373. intersecting the object at all (of course it won't always work).  Suppose for
  2374. this example we have a bloboid sphere or a megafaced convex polyhedron and we
  2375. put a sphere inside the object such that the entire sphere is enclosed in the
  2376. real object.  Now if a ray hits the sphere, it definitely hits the object.  If
  2377. the ray misses the sphere, it may still hit the object somewhere between the
  2378. bounding volume and the "inner tube" volume.  Now this scheme is ideal for
  2379. shadow testing, since where the object is hit by the ray is usually
  2380. irrelevant.  A "normal" ray needs the intersection point, so this scheme may
  2381. not help much (I don't know).
  2382.  
  2383.   :::::::::::::            An ugly (and pretty bad) 2D example:
  2384.  :       000   :
  2385. :      00   00  :          0's define the sphere inside the object :'s
  2386. :     0       *--:
  2387. :    0         0 -:--
  2388.  :   0         0  :  ----
  2389.   :   0       0  :       ----<   Shadow ray that hits at *
  2390.    ::: 00   00  :
  2391.       :::000   :
  2392.      ::::::
  2393.  
  2394. The object could really be any type of object (not just convex) provided a
  2395. sufficient inner tube volume can be constructed.  It's really the same problem
  2396. as the bounding volume:  the better the bounding volume (inner tube) the more
  2397. rays that are culled as misses (hits).
  2398.  
  2399. Is it feasible?  I don't know.  I don't have any complicated-objects code in
  2400. my tracer, so I can't test yet (without writing the code first obviously).
  2401. Perhaps someone who has the type of setup necessary can incorporate this and
  2402. find out (for that matter, has anyone already done it?).  If it's a good
  2403. scheme, maybe I should change my thesis 8-) (I really just wanted to get into
  2404. the next issue of the RT News).  Please give some feedback.
  2405.  
  2406. --------
  2407.  
  2408. Reply from Mark VandeWettering:
  2409.  
  2410. My guess is that while this would work, it is not necessarily a good thing to
  2411. do.  Whether it is an actual speedup is basically a result of how often you
  2412. hit the internal bound versus how often you hit the object.  As a crude guess,
  2413. we might imagine that the probability of hitting an object is roughly
  2414. proportional to its surface area.  Further suppose that our complex object has
  2415. surface area = A, and for the sake of argument, spherical.  As a typical
  2416. example of our inner bound, lets assume it is a sphere as well, but with
  2417. radius 10% smaller.  (This seems pretty tight, I bet you could not do much
  2418. better for real objects).
  2419.  
  2420. If the object has unit radius, its surface area is 4*Pi.  Our "unbounding
  2421. sphere" has surface area .81 * 4 * Pi.  So, we can assume for this argument
  2422. that 81% of all rays that penetrate the object will penetrate the inner
  2423. volume.
  2424.  
  2425. Examining the costs:
  2426.  
  2427.     81% of the time: we just intersect the cheap volume
  2428.     19% of the time: we need to intersect BOTH volumes to determine
  2429.              whether or not the object intersects the ray.
  2430.  
  2431.  
  2432. To generalize: let
  2433.  
  2434.     C(cheap) be the cost of intersecting the cheap volume
  2435.     C(object) be the cost of intersecting the real object
  2436.     p be the probability of a ray which hits the object hitting the
  2437.       inner cheap bounding volume.
  2438.  
  2439. Then, this scheme is a potential speedup if
  2440.  
  2441.     p C(cheap) + (1-p) * (C(cheap) + C(object)) < C(object)
  2442.  
  2443. Is this a speedup?  I dunno.  One scene in Eric Haines' SPD data base includes
  2444. a large gear with 144 edges.  The polygon intersection routine I use is linear
  2445. in the number of edges for a polygon.  The majority of rays fall within a disc
  2446. which probably accounts for 90% or more of the total area of the face.  I am
  2447. pretty sure that a scheme like you suggest would be useful for this case.
  2448.  
  2449. But in general?  I dunno.  It really depends on the probability p.  For
  2450. most objects, my guess is you might be able to get p = 0.5, which would make
  2451. the inequality something like
  2452.     C(cheap) + 0.5 * C(object) < C(object)
  2453. or
  2454.     C(cheap) < 0.5 * C(object)
  2455.  
  2456. which actually does seem to make it attractive.
  2457.  
  2458. In general, if the ratio of C(cheap)/C(object) = r, then we can solve for
  2459. the percentage of inner bounding volumes we need to make this scheme profitable.
  2460.  
  2461. p C(cheap) + (1-p) C(cheap) + (1-p) C(object) < C(object)
  2462.  
  2463. p C(cheap) + C(cheap) - p C(cheap) + C(object) - p C(object) < C(object)
  2464.  
  2465. C(cheap) + C(object) - p C(object) < C(object)
  2466.  
  2467. - p C(object) < -C (cheap)
  2468.  
  2469. p > r
  2470.  
  2471. What this means, if the ratio of speed from cheap to expensive is 1/10, then
  2472. we need to have probability greater than 10% to achieve a speedup.
  2473.  
  2474. Hmmm.  This probably bears looking into.  Any comments?
  2475.  
  2476. --------
  2477.  
  2478. John Gregor comments:
  2479.  
  2480. Well, to add another data point, the Wavefront software has both a "trace
  2481. object" and a "shadow object" associated with each object being rendered.
  2482.  
  2483. The trace object is the object used in reflections.  Usually, these objects
  2484. are left undefined, or point to a lower complexity, but similarly shaped,
  2485. object.  Since shadows and objects appearing as reflections are typically
  2486. small and are there to provide visual cues and since Wavefront's running time
  2487. is decidedly non-linear to number of polygons in the scene, this is a win.
  2488.  
  2489. Also, you can achieve some neat tricks using this.  You can have an object
  2490. cast a shadow from a completely different object (e.g. a kitten casting a
  2491. lion's shadow) or appearing as something else in mirrors.  Using the same
  2492. object with a different offset or scale can lead to some pretty neat effects
  2493. occasionally also.
  2494.  
  2495. --------
  2496.  
  2497. Rick Speer writes:
  2498.  
  2499. I'd like to add my $0.02 and note that W.  R.  Franklin examined this idea in
  2500. a non-raytracing but similar context in the following paper-
  2501.  
  2502.   "3D Geometric Databases using Hierarchies of Inscribing Boxes", pp.  173-80
  2503.   in Proceedings of "CMCCS '81" (this is what the Canadian conference now
  2504.   known as 'Graphics Interface' used to be called; these volumes are available
  2505.   from the Canadian Information Processing Society, Toronto, if anyone's
  2506.   interested).
  2507.  
  2508. To be more specific, let me quote a bit from the paper's abstract-
  2509.  
  2510.   "Hierarchical tree structured databases are an efficient way of representing
  2511.    scenes with elaborate detail of varying scales.  Storing a circumscribing
  2512.    box around each object is a well known method of testing whether the object
  2513.    intersects or obstructs any other objects.  This paper proposes another
  2514.    aid:  an inscribing box.  The inbox is a polyhedron that is completely
  2515.    contained in the ob- ject.  It should be as large as is easy to
  2516.    determine...  The inbox speeds up visibility tests [in the following
  2517.    way:...  ] [He concludes,] By combining inboxes and circumboxes, it is
  2518.    possible to calculate the visible surfaces of a hierarchical scene in time
  2519.    linear in the visible complexity of the scene..."
  2520.  
  2521. In his followup message, Mark goes on to note that this issue really needs to
  2522. be studied on test scenes using a probabilistic analysis.  I hope it wouldn't
  2523. be too immodest of me to note that such an analysis appears in the paper,
  2524.  
  2525.   "A Theoretical and Empirical Analysis of Coherent Ray-tracing",
  2526.   L. R. Speer, T. DeRose and B. Barsky, pp. 11-25 in the Proceed-
  2527.   ings of Graphics Interface '85, CIPS, Toronto, 1985.
  2528.  
  2529. -------------------------------------------------------------------------------
  2530.  
  2531. SIMD Parallel Ray Tracing, by George Kyriazis, Rick Speer
  2532.  
  2533. In article <9308@mirsa.inria.fr> kjartan@puce.inria.fr (Kjartan Emilson) writes:
  2534. >
  2535. >Does anybody have an algorithm for a massively parallel raytracer,
  2536. >which could for example run on a Connection Machine, i.e a machine
  2537. >with a 'single instruction - many data' architecture ?
  2538. >
  2539.  
  2540. The ray-tracing algorithm is usually parallelized ray-at-a-time, which makes
  2541. it suitable for MIMD machines.  If you want to run it on an SIMD you have a
  2542. problem, since you have to advance all rays at the same time, then filter out
  2543. which rays do not need a second reflection, and trace the second level, etc.
  2544.  
  2545. I believe that Scott Whitman (at uiuc?) has written a ray-tracer for a SIMD
  2546. machine.  I don't remember any details.  Pick up the SIGGraph proceedings for
  2547. either '88 or '89 (don't remember which one) on ray-tracing or parallel
  2548. computer architectures for computer graphics and you are going to see his name
  2549. there.
  2550.  
  2551. --------
  2552.  
  2553. Rick Speer writes:
  2554.  
  2555. A fair amount of literature is beginning to appear on this subject.
  2556. The references below should get you started.
  2557.  
  2558.   "3D Image Synthesis on the Connection Machine", Franklin C. Crow,
  2559.   Gary Demos, Jim Hardy, John McLaughlin and Karl Sims, pp. 254-69
  2560.   in Parallel Processing for Computer Vision and Display, P. M. Dew,
  2561.   T. R. Heywood and R. A. Earnshaw, Eds., Addison-Wesley, 1989.
  2562.  
  2563.   "Ray Tracing on a Connection Machine", H. C. Delaney, pp. 659-67
  2564.   in the Proceedings of the 1988 International Conference on Super-
  2565.   computing, ACM, July, 1988.
  2566.  
  2567.   "Ray-tracing Parallelization on a SIMD/SPMD Machine", PhD. Thesis,
  2568.   Marie-Claire Forgue, Laboratoire de Signaux et Systemes, Universite
  2569.   de Nice, Nice, France, September, 1988.
  2570.  
  2571.   "Distributed Ray Tracing Using an SIMD Processor Array", A N. S.
  2572.   Williams, B. F. Buxton and H. Buxton, pp. 703-25 in Theoretical
  2573.   Foundations of Computer Graphics and CAD, R. A. Earnshaw, Ed.,
  2574.   Springer-Verlag, 1988.
  2575.  
  2576. -------------------------------------------------------------------------------
  2577.  
  2578. Rayscene Animator, by Jari K{hk|nen [sic]
  2579.  
  2580.   Thanks to all people who voted for Rayscene.  It's now available from
  2581. tolsun.oulu.fi.  Version is 1.3, which the first published version of Rayscene
  2582. so docs are not perfect.  But we are working on it...
  2583.  
  2584.   The stuff is in directory /pub/rayscene.  Directory also contains two ani-
  2585. mations for PC and animation player (Autodesk Animator AAPLAY.EXE).  Those
  2586. animations were made with Rayscene and DKB-raytracer.  Enjoy.  Also stuff for
  2587. Amiga should be available soon.
  2588.  
  2589.   More information from hole@rieska.oulu.fi or oldfox@rieska.oulu.fi
  2590.  
  2591. --------
  2592.  
  2593.   There are a few animation demos, made with the "Rayscene" animation utility
  2594. FTPable from tolsun.oulu.fi (128.214.5.6) in the directory
  2595. /pub/rayscene/anim.PC (for "Autodesk Animator" on the PC) and in
  2596. /pub/rayscene/anim.amiga (for "Movie" on the Amiga).  Here is a short
  2597. description of the animation files:
  2598.  
  2599. PC-stuff:
  2600. aaplay.lzh    Autodesk Animator animation player, freely distributable
  2601. rdice.lzh     One mirrored die rounding over chess board
  2602. 2dice.lzh     Two dice ...
  2603. movdice.lzh   same as above, but viewpoint moves
  2604. bouncing.lzh  Mirrored ball bouncing over chess board
  2605. 2balls.lzh    Two mirrored, color-changing balls moving over wavy surface.
  2606.           Animation data files created with Rayscene's soon-released utili-
  2607.           ty, "Sin". Data file and array file by Panu Hassi. This animation
  2608.           (Amiga version) can also be found from anim.amiga
  2609.           NOTE: When Sin is released with Rayscene version 1.31, datafile
  2610.           and arrayfile are included (and explained too.)
  2611. vortdemo.lzh  Combination of three different animations:cylinder, mech and
  2612.           Chess. These animations are usually distributed with VORT-tracer.
  2613.           NOTE: No Rayscene used. Just for fun...and there seems to be a
  2614.           request for raytraced animations...
  2615.  
  2616.  
  2617. Amiga:
  2618.  
  2619.  At the moment, only 2balls is available. There's going to be more...
  2620.  
  2621.  Rayscene was released only a few weeks ago, so there are going to be more
  2622. animations here.  Email me for more information.
  2623.  
  2624. NOTICE:  Rayscene is now available from iear.arts.rpi.edu also.  (Directory
  2625. /pub/graphics/ray/rayscene).  Animations are available only from tolsun...
  2626.  
  2627. P.S. DKBTracer was used for rendering.
  2628.  
  2629. -------------------------------------------------------------------------------
  2630.  
  2631. SIPP 2.0 3d Rendering Package, by Jonas Yngvesson and Inge Wallin
  2632.  
  2633. We just posted the source code to sipp 2.0 in comp.sources.misc.  It may be a
  2634. while before it appears due to moderation, though.  Here is an excerpt from
  2635. the README file:
  2636.  
  2637. *******************************************************************
  2638.          sipp 2.0  --  3d rendering package
  2639.  
  2640.          by         Jonas Yngvesson   jonas-y@isy.liu.se
  2641.             Inge Wallin       ingwa@isy.liu.se
  2642.  
  2643.          Linkoping Institute of Technology
  2644.          Sweden
  2645. *******************************************************************
  2646.  
  2647. This is the beta-test release of version 2.0 of SIPP, the SImple Polygon
  2648. Processor.  SIPP is a library for creating 3-dimensional scenes and rendering
  2649. them using a scan-line z-buffer algorithm.  A scene is built up of objects
  2650. which can be transformed with rotation, translation and scaling.  The objects
  2651. form hierarchies where each object can have arbitrarily many subobjects and
  2652. subsurfaces.  A surface is a number of connected polygons which are rendered
  2653. with Phong interpolation of the surface normals.
  2654.  
  2655. The library has an internal database for the objects that is to be rendered.
  2656. Objects can be installed in, and removed from, this database at any time.
  2657.  
  2658. The library also provides 3-dimensional texture mapping with automatic
  2659. interpolation of texture coordinates.  Simple anti-aliasing is performed
  2660. through double oversampling.  A scene can be illuminated by an arbitrary
  2661. number of light sources.  A basic shading algorithm is provided with the
  2662. library, but the user can also use his own shading algorithms for each surface
  2663. to produce special effects.  Images are produced in the Portable Pixmap format
  2664. (ppm) for which many utilities exist.
  2665.  
  2666. -------------------------------------------------------------------------------
  2667.  
  2668. 3DDDA Comments, by John Spackman
  2669.  
  2670. 3d-dda's are prone to many special cases, especially when line slopes approach
  2671. zero (so the the inverse line slope, generally used as the increment a la
  2672. ARTS) approaches infinity.
  2673.  
  2674. A more numerically stable & hence more robust generalization of Bresenham's
  2675. algorithm to 3D, which navigates ALL the voxels intersected by the ray is
  2676. described in
  2677.  
  2678.     `Scene Decompositions for Accelerated Ray Tracing', John Spackman,
  2679.     PhD Thesis The University of Bath, UK, 1990. Available as Bath Computer
  2680.     Science Technical Report 90/33
  2681.  
  2682. Copies can be ordered from Angela Coburn at JANET:  `amc@uk.ac.bath.maths' or
  2683. ARPA:  `amc%maths.bath.ac.uk@nsfnet-relay.ac.uk'.  Any surface mail should be
  2684. addressed to:-
  2685.  
  2686.     Angla Coburn
  2687.     Mathematical Sciences
  2688.     The University of Bath
  2689.     Claverton Down
  2690.     Bath
  2691.     AVON
  2692.     BA2 7AY
  2693.     UK
  2694.  
  2695. However, uniform spatial division is generally wasteful in memory costs, being
  2696. non-adaptive.  I prefer octtrees - the above thesis describes an incremental
  2697. ray navigation of octtrees & techniques for octtree construction (& indeed for
  2698. building Uniform grids).  - `My way's better than everyone elses' :-)
  2699.  
  2700. -------------------------------------------------------------------------------
  2701.  
  2702. Radiosity Implementation Available via FTP, by Sumant (sumant@shakti.ernet.in)
  2703.  
  2704. I have carried out some Radiosity implementations as part of the investigation
  2705. into light equilibrium based rendering methods for my doctoral work.  To test
  2706. the implementation, I have used a very simplified scene modeler, BOX.  BOX
  2707. supports only box as the modeling primitive and translation and scaling as the
  2708. modeling transformation.
  2709.  
  2710. I am looking for some good planar surface model data.  Interested netters may
  2711. please send me data with the data format.  I will try to provide the input
  2712. interface for the sent data formats.
  2713.  
  2714. The implementation is available at our FTP site (pub/Rad.0.1.tar.Z at
  2715. sbs.ncst.ernet.in ip# 144.16.1.21).  In case of any difficulty in getting from
  2716. the FTP site, please send me mail on sumant@shakti.ernet.in.  I will send the
  2717. UUENCODED compressed tar file.
  2718.  
  2719. The system has been tested both on SUN and VAX is expected to run on any UNIX
  2720. platform.
  2721.  
  2722. Further, I invite comments and suggestions from the interested users.
  2723.  
  2724.  
  2725. sumant(sumant@shakti.ernet.in)
  2726. national centre for software technology,bombay,india
  2727.  
  2728. -------------------------------------------------------------------------------
  2729.  
  2730. Dirt, by Paul Crowley
  2731.  
  2732. I've been thinking about this one, and dirt is a nightmare of the first order.
  2733. No, I'm not talking about my personal hygiene...
  2734.  
  2735. I was in the kitchen (this _does_ have CG content, bear with me) and I thought
  2736. "Wouldn't this be a nice interesting scene to try and render.  The reflection
  2737. of the marble back wall against the taps, the kettle, the shadows from the
  2738. fluorescent strip lights, the cups...  fun".
  2739.  
  2740. Then I looked at the dirt.  It was a pretty clean kitchen, as kitchens go.
  2741. There was no mould on the plates, as there is in the kitchen at home (it's my
  2742. flatmates fault.  I eat out now as a survival precaution).  But, for example,
  2743. there was a whole _variety_ of crumbs on the floor.  Breadcrumbs, little bits
  2744. of onion peel, poppy seeds, a discarded match...  anyone looking for
  2745. photorealism would have to come up with a description of each of these.  Or
  2746. the dirt on the iron - you couldn't just throw some "turbulence" function at
  2747. this or fractals because the dirt on irons isn't uniform - you'd have to go
  2748. into the physics of how dirt forms on irons.  I'm not sure if that physics is
  2749. even fully understood.  There were little pencil marks on the cupboard doors
  2750. where the carpenters marked them - if you had been rendering it, would you
  2751. have remembered those?  A dribble of water down one side of a cup.  A blue
  2752. stain on the carpet whose cause is a mystery to me.
  2753.  
  2754. The trouble with dirt is that it's a result of the history of those objects,
  2755. and not a static thing.  That chip in the sideboard is in _that_ position
  2756. because your flatmate was trying to get a cold sausage out of the fridge, but
  2757. she was blind drunk and accidentally drove a waterpipe into it while heading
  2758. for the ground at high speed.  You going to write a simulation of that?  Will
  2759. you remember to include the little bit of sweater that got caught in the chip
  2760. last Tuesday?
  2761.  
  2762. Photorealism is _really_ hard.
  2763.  
  2764. \/ o\ Paul Crowley aipdc@uk.ac.ed.castle
  2765. /\__/ Trust me, I know what I'm doing.
  2766.  
  2767. -------------------------------------------------------------------------------
  2768.  
  2769. Thomson Digital Images University Donation Program, by Michael Takayama
  2770.     (tak@tce.com)
  2771.  
  2772. Thomson Digital Images (TDI) America is offering a special donation program to
  2773. qualified educational facilities in the U.S.  and Canada interested in 3D
  2774. computer graphics/animation for Industrial Design, Scientific Visualization,
  2775. and Animation.  TDI Explore v2.3 software is a high-end workstation-based
  2776. package including sophisticated 3D modeling, animation, and rendering
  2777. capabilities.  Some features of the software include NURBS modeling, inverse-
  2778. kinematics animation, particle-system animation, interactive 3D texture
  2779. editing, fast scan-line rendering and ray-tracing.  TDI is a world leader in
  2780. the high-end 3D graphics/animation market with an installed base of more than
  2781. 450 systems.
  2782.  
  2783. *******************************************************************************
  2784.  
  2785.               UNIVERSITY DONATION PROGRAM
  2786.               ---------------------------
  2787.  
  2788. If you have ever thought about working with 3D, now is the time.  TDI America
  2789. will donate the EXPLORE software to universities and colleges in the United
  2790. States and Canada to give students access to the newest developments in the
  2791. world of 3D computer animation and graphics.
  2792.  
  2793. There are certain criteria which must be adhered to in order for a college/
  2794. university to be a successful candidate for this program:
  2795.  
  2796.     1.  EXPLORE must be used for research or educational projects.
  2797.  
  2798.     2.  The software must be made available to a minimum of 10 students
  2799.         per year.
  2800.  
  2801.     3.  The software must not be used for commercial purposes without
  2802.         the express written permission of TDI America.
  2803.  
  2804.     4.  The school must appoint one person who will act as the direct
  2805.         contact with TDI America.
  2806.  
  2807.     5.  A software maintenance agreement and a software license agreement
  2808.         must be signed and returned to TDI America.
  2809.  
  2810. Because our university donation program provides software free of charge, the
  2811. only costs involved are for maintenance (which includes a one year warranty,
  2812. telephone support and free upgrades) and training.
  2813.  
  2814. TDI runs on the full range of Silicon Graphics workstations and the IBM RISC
  2815. 6000.  The Silicon Graphics hardware can be ordered from TDI at our
  2816. educational discount prices for your convenience.
  2817.  
  2818. To demonstrate your interest in our university donation program, please send
  2819. me a letter indicating your intended use of the software, what workstation(s)
  2820. you have or would like to purchase, and your time frame.  I will be happy to
  2821. put together a price proposal for you, to arrange for a demo, and to discuss
  2822. with you the applications of our software for your school.
  2823.  
  2824. I look forward to speaking with you about EXPLORE and our donation program.
  2825.  
  2826. Sincerely,
  2827.  
  2828. Karen Lazar
  2829. Director, University Donation Program
  2830. TDI America
  2831.  
  2832. *******************************************************************************
  2833.  
  2834. For more information, contact:
  2835.  
  2836.            Karen Lazar
  2837.            Director, University Donation Program
  2838.            TDI America
  2839.            1270 Avenue of the Americas
  2840.            Suite 508
  2841.            New York, NY 10020
  2842.            TEL:  212/247-1950
  2843.            FAX:  212/247-1957
  2844.  
  2845. *******************************************************************************
  2846. Michael Takayama                                      email:  tak@tce.com
  2847. Technical Support Manager
  2848. TDI America
  2849.  
  2850. --------
  2851.  
  2852. >Great initiative. Any ideas to make the donation valid outside USA and Canada,
  2853. >like making it worldwide? Whom should I contact to get this information?
  2854.  
  2855. TDI America has made this donation offer available only to educational
  2856. facilities in the United States and Canada.  For those of you located
  2857. elsewhere in North or South America, you can ask if the program can be made
  2858. available to you.
  2859.  
  2860. Contact:    Karen Lazar [etc...]
  2861.  
  2862. For those of you located in Europe, you can try contacting the TDI home office
  2863. in Paris, France.  I believe that they have a similar program available in
  2864. Europe.
  2865.  
  2866. Contact:    Thomson Digital Image
  2867.         22 rue Hegesippe-Moreau
  2868.         75018 Paris
  2869.         FRANCE
  2870.         TEL:  33-1-43-87-58-58
  2871.         FAX:  33-1-43-87-61-11
  2872.  
  2873. -------------------------------------------------------------------------------
  2874.  
  2875. A Brief Summary of Ray Tracing Related Stuff, Angus Y. Montgomery
  2876.     (angus@godzilla.cgl.rmit.oz.au)
  2877.  
  2878. I have found (been given/know of) these raytracers (rt's), 3d object file
  2879. formats, and object file databases (db's).  If you know of other non-trivial
  2880. rt's available please let me know asap.
  2881.  
  2882. NOTE:  before madly ftp-ing in these rt's and stuff, check out eric
  2883. (erich@eye.com) haines' rt-related ftp site list for a site near _you_.  his
  2884. list is fairly comprehensive and up to date, and is what i used to find most
  2885. of the following.
  2886.  
  2887.  
  2888. x : before the source means that it is a duplicate of the most
  2889.    up-to-date i have downloaded.
  2890. xx : dated compared to another.
  2891. * this is the _source_ site - the rt from there couldn't be any fresher
  2892.  
  2893. rt : (a.k.a and de-acronymation) my source.
  2894.  
  2895.  
  2896.    >>>rts(ftp and by request):
  2897. art : (a rt, VORT) *|munnari.oz.au
  2898. brl : (ballistic research lab) more info at hanauma.stanford.edu
  2899. dbw : (dist render, distpro, d.b.wecker) hanauma.stanford.edu x|munnari.oz.au
  2900. drt : (distance rt, rayman) iear.arts.rpi.edu
  2901. dkb : (d.k.buck) iear.arts.rpi.edu 2.01 (or .10 ?) xx|cs.uoregon.edu (*alfred)
  2902. mtv : x|iear.arts.rpi.edu *|cs.uoregon.edu uses nff
  2903. ohta : iear.arts.rpi.edu xx|cs.uoregon.edu
  2904. pray : (vm_pray) cs.uoregon.edu (*irisa)
  2905. prt : (parallel) from comp.graphics/Kory Hamzeh
  2906. qrt : (quik) iear.arts.rpi.edu xx|cs.uoregon.edu
  2907. rad : from Ning Zhang.
  2908. radiance : from Greg Ward
  2909. ray : ucsd.edu v3.0 runs off nff :is this an earlier mtv?
  2910. rayshade  : xx|iear.arts.rpi.edu cs.uoregon.edu v3.0 (*weedeater)
  2911. rpi : (Kyriazis, pxm, vmpxm, gk aargh!) do differ, but in essence the same
  2912.    *|iear.arts.rpi.edu v2.0 x|cs.uoregon.edu xx|ucsd.edu
  2913.  
  2914.  
  2915.    >>>object databases:
  2916. NFF : (neutral file format) gondwana.ecr.mu.oz.au
  2917. OFF : (object file format) gondwana.ecr.mu.oz.au
  2918. poly : polyhedra db
  2919. spd v3 : (standard procedural db) cs.uoregon.edu produces NFF
  2920.  
  2921.  
  2922.    >>>other formats:
  2923. AutoCAD : cad $
  2924. GDS things file : (thf) cad
  2925. IGES : (initial graphics exchange standard)
  2926. architron : (arch) cad
  2927. imagine : amiga $
  2928. irender : (slp) sgi $
  2929. renderman : pixar's
  2930. rtk : (rt kernel) $
  2931. turbo silver : amiga $
  2932. videoscape3D : amiga
  2933.  
  2934.  
  2935.    >>>(not what i wanted : trivial or limited)
  2936. fritz
  2937. good
  2938. micro : (uray, DBW_uray) a smaller version of dbw
  2939. mini : (paul)
  2940. mintrace : (shortest)
  2941. nonfinished
  2942. obfus
  2943. ps
  2944.    >>>(not rts)
  2945. rayscene
  2946. wave
  2947.  
  2948. -------------------------------------------------------------------------------
  2949. END OF RTNEWS
  2950.